: Slightly Updated Semi Playerkilling (Playerkilling Zones) meh... I just realized that the PK check in spell_parser.c would crash on object spells, like locate. Why? Because it tried to get player/character info on objects, but its no biggie, one line will fix the problem. So if you already added the code, redo step nine. I believe that total playerkilling ruins a mud, i like the idea of having playerkilling zones, clan war, etc. This is a easy way to add playerkilling zones. When you attack in the playerkiller zone, killer flag will not be set. This kind of system can be made in many different ways, you can use special procedures for rooms to enable PK etc. But this is probably the easiest. There are millions of things that can be added, this snippet is just to get the idea into your head. -----------------------------[ Step One ]----------------------------- > in file act.informative.c > in do_who > search for strcat(buf, " (KILLER)"); > add this under if (PLR_FLAGGED(tch, PLR_SEMIPK)) strcat(buf, " (SEMI-PK)"); -----------------------------[ Step Two ]----------------------------- > in file act.movement.c > in do_simple_move( > search for send_to_char("You aren't godly enou > add under return (0); } if (GET_LEVEL(ch) < LVL_IMMORT) { if (ROOM_FLAGGED(EXIT(ch, dir)->to_room, ROOM_PLAYERKILLING) && (!PLR_FLAGGED(ch, PLR_SEMIPK))) { send_to_char("You are about to enter a PlayerKiller zone!\r\n", ch); send_to_char("In order to do that, you must first use the command 'PK'.\r\n", ch); return (0); } ----------------------------[ Step Three ]---------------------------- > in file act.offensive.c > in do_hit > replace the if (!pk_allowed) { part > be sure that pk is set to no in config.c. if (!pk_allowed) { if (!IS_NPC(vict) && !IS_NPC(ch)) { if (subcmd != SCMD_MURDER) { if (!ROOM_FLAGGED(ch->in_room, ROOM_PLAYERKILLING) || (!PLR_FLAGGED(vict, PLR_SEMIPK))) { send_to_char("Playerkilling only allowed in playerkiller zones.\r\n", ch); return; } } else { check_killer(ch, vict); }} ----------------------------[ Step Four ]----------------------------- > in file act.offensive.c > in do_backstab > search for send_to_char("You can't backsta > add under return; } if (!IS_NPC(vict) && !IS_NPC(ch)) { if (!ROOM_FLAGGED(ch->in_room, ROOM_PLAYERKILLING) || (!PLR_FLAGGED(vict, PLR_SEMIPK))) { send_to_char("Playerkilling only allowed in playerkiller zones.\r\n", ch); return; }} ----------------------------[ Step Five ]----------------------------- > in file act.offensive.c > in do_bash > search for send_to_char("Aren't we f > add under return; } if (!IS_NPC(vict) && !IS_NPC(ch)) { if (!ROOM_FLAGGED(ch->in_room, ROOM_PLAYERKILLING) || (!PLR_FLAGGED(vict, PLR_SEMIPK))) { send_to_char("Playerkilling only allowed in playerkiller zones.\r\n", ch); return; }} ----------------------------[ Step Six ]------------------------------ > in file act.offensive.c > in do_kick > search for send_to_char("Aren't we f > add under return; } if (!IS_NPC(vict) && !IS_NPC(ch)) { if (!ROOM_FLAGGED(ch->in_room, ROOM_PLAYERKILLING) || (!PLR_FLAGGED(vict, PLR_SEMIPK))) { send_to_char("Playerkilling only allowed in playerkiller zones.\r\n", ch); return; }} ---------------------------[ Step Seven ]----------------------------- > in file fight.c > in void check_killer( > search for if (PLR_FLAGGED(ch, PLR_KILLER) || IS_NPC(ch) > add under return; if (PLR_FLAGGED(ch, PLR_SEMIPK)) return; ---------------------------[ Step Eight ]----------------------------- > in file fight.c > in void die( > search for void die( > add under if (!IS_NPC(ch)) REMOVE_BIT(PLR_FLAGS(ch), PLR_SEMIPK); ---------------------------[ Step Nine ]------------------------------ > in file sell_parser.c > in int cast_spell( > search for log("SYSERR: cast_spell try > add under return(0); } if (tch != NULL && IN_ROOM(tch) == IN_ROOM(ch)) { if (!IS_NPC(tch) && !IS_NPC(ch) && SINFO.violent) { if (!ROOM_FLAGGED(ch->in_room, ROOM_PLAYERKILLING) || (!PLR_FLAGGED(tch, PLR_SEMIPK))) { send_to_char("Playerkilling only allowed in playerkiller zones.\r\n", ch); return (0); }}} ---------------------------[ Step Ten ]------------------------------- > in file structs.h > in player flags > search for #define PLR_NODELETE > add to the bottom of the list #define PLR_SEMIPK (1 << 16) > in room flags > search for #define ROOM_BFS_MARK > add to the end of the list #define ROOM_PLAYERKILLING (1 << 17) -------------------------[ Step Eleven ]------------------------------ > in file act.other > add to local functions, the acmd list ACMD(do_pk); > paste anywhere, maybe at the end of the file? ACMD(do_pk) { if (IS_NPC(ch)) { send_to_char("Yeah right.....\r\n", ch); return; } if (GET_LEVEL(ch) >= LVL_IMMORT) { send_to_char("PlayerKilling is not for immortals.\r\n", ch); return; } if (!PLR_FLAGGED(ch, PLR_SEMIPK)) { SET_BIT(PLR_FLAGS(ch), PLR_SEMIPK); send_to_char("Access to the playerkilling zones has been granted.\r\n", ch); send_to_char("Be sure to read the rules regarding playerkilling.\r\n", ch); return; } if (PLR_FLAGGED(ch, PLR_SEMIPK)) { REMOVE_BIT(PLR_FLAGS(ch), PLR_SEMIPK); send_to_char("Access to the playerkilling zones has been removed.\r\n", ch); return; }} -------------------------[ Step Twelve ]------------------------------ > in file constants.c > in /* ROOM_x */ > search for "*", > add above "\n" "PLAYERKILLING", ------------------------[ Step Thirteen ]----------------------------- > in file oasis.h > search for #define NUM_ROOM_FLAGS add 1 to the number ------------------------[ Step Fourteen ]----------------------------- > in file interpreter.c > search for ACMD(do_pour); > add to the acmd list ACMD(do_pk); > search for { "pick" > add { "pk" , POS_DEAD , do_pk , 0, 0 }, ---------------------------------------------------------------------- Add the following code to all of your manually added offensive skills. adding it above the check for peaceful room will work just fine. if (!IS_NPC(vict) && !IS_NPC(ch)) { if (!ROOM_FLAGGED(ch->in_room, ROOM_PLAYERKILLING) || (!PLR_FLAGGED(vict, PLR_SEMIPK))) { send_to_char("Playerkilling only allowed in playerkiller zones.\r\n", ch); return; }} Do whatever you want with this piece of code. Enjoy it, hate it, smash it, remake it...... If you decide to use it, please send me a mail, including the address to your mud. A line in your credit file is of course also appreciated / Hugor (hugor@freebox.com)