/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /**************************************************************************** * ROM 2.4 is copyright 1993-1998 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@hypercube.org) * * Gabrielle Taylor (gtaylor@hypercube.org) * * Brian Moore (zump@rom.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * *****************************************************************************/ /**************************************************************************** * I got tired of the stock surrender command that, while in PK, always * * ended in a successful stop of the fight. This was easy to abuse as a * * sure fire way to get around having to flee in PK. What this code does * * is change surrender to a system of needing acceptance in order for the * * fight to stop. This code was originally written by Joseph, aka Diablos * * of End of Time at eotmud.com:4000. In order to use this code, you must * * abide by the Diku, Merc, and Rom licenses, and may not be used in any * * MUD that may be considered commercial, pay-to-play, or pay-for-perks. * * No credit is required, but is certainly appreciated if my name was * * added as credit in a snippet or surrender helpfile. All code comments * * MUST remain within the do_surrender and do_accept commands. Please * * note that on End of Time, we have a "defend" command that enters the * * character into a defensive stance where all of their defensive skills * * are increased, and they stop attacking during normal combat. Going into* * surrender mode on EoT automatically puts the character into defend, and * * any instance of surrender being removed will bring the character out * * of defend. Likewise, coming out of defend will remove the character * * from surrender if they are in surrender mode. Since defend isn't a * * stock feature, I haven't included any references to that in the actual * * code, however, any similar systems in your game ought to work well with * * this and I would recommend doing something similar if you don't already * * have anything like this. Also noted within the code is the value you * * change that determines how many rounds surrender will remain active. * * The value I have it set at may not be appropriate for your game. One * * final note, I have this written with mobprogf unctionality; if your game* * doesn't have these, you will need to remove some code but I will point * * out where. This code was originally released on Mudbytes at * * http://www.mudbytes.net/ * ****************************************************************************/ /* In Merc.h look for: struct char_data Scroll near the bottom of the struct and add: */ sh_int surrender; //Timer /* This is the timer value that will handle how long a character remains in surrender */ /* Go into interp.c and make sure you have a do_surrender function. If not then add: */ {"surrender", do_surrender, POS_FIGHTING, 0, LOG_NORMAL, 1}, /* Also add: */ {"accept", do_accept, POS_FIGHTING, 0, LOG_NORMAL, 1}, /* Go into interp.h and add this if you don't have the surrender command already: */ DECLARE_DO_FUN( do_surrender ); /* Also in interp.h add: */ DECLARE_DO_FUN( do_accept ); /* In Fight.c look for near the top: void violence_update (void) Find the part of the code that says: if ((victim = ch->fighting) == NULL) continue; And add this after it: */ if(ch->surrender > 0) { if(--ch->surrender <= 0) { send_to_char("Your attempts at surrender have been ignored.\r\n",ch); //If you have anything similar to the defend mentioned before, this is //the place you would put removing it. } } /*Also in fight.c find: void stop_fighting (CHAR_DATA * ch, bool fBoth) and just before this line: fch->fighting = NULL; add: */ if(fch->surrender > 0) fch->surrender = 0; /* Now find do_surrender in (probably) fight.c I would recommend putting comment codes around the entire function rather than deleting it... just incase. Paste this after it: */ void do_surrender (CHAR_DATA * ch, char * argument) { /* Surrender/Accept commands written by Joseph, aka Diablos, of End of Time eotmud.com:4000 */ CHAR_DATA *mob; if ( (mob = ch->fighting) == NULL ) { send_to_char( "But you're not fighting!\r\n", ch ); return; } //You may consider adding in restrictions to surrender if under the effect of things //like berserk, frenzy, etc. (you may remove this comment) WAIT_STATE( ch, 2 * PULSE_VIOLENCE ); if(ch->surrender > 0) { act( "You revoke your attempt to surrender!", ch, NULL, mob, TO_CHAR ); act( "$n revokes $s attempt to surrender!", ch, NULL, mob, TO_VICT ); act( "$n revokes $s attempt to surrender!", ch, NULL, mob, TO_NOTVICT ); ch->surrender = 0; //This is where you would remove 'defend' or similar effect. (you may remove this comment) return; } act( "You try to surrender to $N!", ch, NULL, mob, TO_CHAR ); act( "$n tries to surrenders to you!", ch, NULL, mob, TO_VICT ); act( "$n tries to surrender to $N!", ch, NULL, mob, TO_NOTVICT ); /* This is where you would remove some code to remove the mobprog functionality. If you don't have mobprogs, the if check should read: if ( !IS_NPC( ch ) && IS_NPC( mob )) (you may remove this commend) */ if ( !IS_NPC( ch ) && IS_NPC( mob ) && ( !HAS_TRIGGER_MOB( mob, TRIG_SURR ) || !p_percent_trigger( mob,NULL, NULL, ch, NULL, NULL, TRIG_SURR ) ) ) { act( "$N seems to ignore your cowardly act!", ch, NULL, mob, TO_CHAR ); multi_hit( mob, ch, TYPE_UNDEFINED ); return; } //Change this value to determine how many passes of violence_update it will take for //the surrender to be considered ignored. ch->surrender = 8; //This is where you add any 'defend' like effect (you may remove this comment) return; } void do_accept (CHAR_DATA * ch, char * argument) { /* Surrender/Accept commands written by Joseph, aka Diablos, of End of Time eotmud.com:4000 */ CHAR_DATA *mob; int exploss; char buf[MSL]; if ( (mob = ch->fighting) == NULL ) { send_to_char( "But you're not fighting!\r\n", ch ); return; } //You may consider adding in restrictions to surrender if under the effect of things //like berserk, frenzy, etc. (you may remove this comment) if(mob->surrender <= 0) { send_to_char("They haven't offered to surrender!\r\n",ch); return; } act( "You accept $N's surrender.", ch, NULL, mob, TO_CHAR ); act( "$n accepts your surrender.", ch, NULL, mob, TO_VICT ); act( "$n accepts $N's surrender.", ch, NULL, mob, TO_NOTVICT ); stop_fighting( mob, TRUE ); //default exp penalty: exploss = mob->level * number_range(25,50); mob->exp -= exploss; sprintf( buf, "You lose %d exp.\r\n", exploss); send_to_char(buf,mob); return; }