Manual:DIL Manual/meleedamage()
Jump to navigation
Jump to search
Function: meleedamage ( c : unitptr, v : unitptr, b : integer, wt : integer );
c the character that should make an additional attack v the character being attacked b any penalty or bonus added to the attack. wt the weapon type of the attack, if a valid type then that is used for the attack purpose, otherwise the default weapon/hand attack is used. returns The amount of damage done or -1 for failed
ch' performs an attack (using whatever weapon is wielded or his bare hands) against 'vict'. If wtype is within a valid weapon range (WPN_XXX) any weapon will be bypassed, and the value will be used as the attacktype. Good for things like "meleeattack (ch, vict, bonus, WPN_CIRCLE_KICK)" If you want person to be able to perform an extra attack even though wielding a weapon or something. Note that this will require BOTH a weapon type WPN_CIRCLE_KICK and a skill "kick" in order for it to work. Example: ---~---~---~---~---~---~---~---~---
dilbegin kick(arg : string); external provoked_attack (victim : unitptr, ch : unitptr);
var bonus : integer; targ : unitptr;
code { if ((self.type == UNIT_ST_PC) and (self.weapons[WPN_KICK] <= 0)) { act("You must practice first.", A_ALWAYS, self, null, null, TO_CHAR); quit; }
if (arg == "") { if (self.fighting) { targ := self.fighting; goto kick; }
act("Kick who?", A_SOMEONE, self, null, null, TO_CHAR); quit; }
targ := findunit(self, arg, FIND_UNIT_SURRO, null);
if ((targ == null) or not visible(self, targ)) { act("That person is not here!", A_SOMEONE, self, null, null, TO_CHAR); quit; }
if (not (targ.type & (UNIT_ST_PC | UNIT_ST_NPC))) { act("You can't kick that, silly!", A_SOMEONE, self, null, null, TO_CHAR); quit; }
if (targ == self) { act("You kick yourself.", A_HIDEINV, self, null, null, TO_CHAR); act("$1n kicks $1mself.", A_HIDEINV, self, null, null, TO_ROOM); quit; }
if ((targ.type==UNIT_ST_PC) and (self.type==UNIT_ST_PC)) { if (not(isset (self.pcflags, PC_PK_RELAXED))) { act ("You are not allowed to do this unless you sign the book of blood.", A_ALWAYS,self,null,null,TO_CHAR); quit; }
if (not(isset (targ.pcflags, PC_PK_RELAXED))) { act ("You are not allowed to do this unless $2e signs the book of blood.", A_ALWAYS,self,targ,null,TO_CHAR); quit; } }
:kick: /* Penalty for wielding a weapon while kicking! */ if (equipment(self, WEAR_WIELD)) bonus := -25; else bonus := +25; if (self.endurance < 2) act("You are too exhausted to attempt that.", A_ALWAYS, self, null, null, TO_CHAR); else self.endurance := self.endurance - 2; provoked_attack (targ, self); bonus := meleeattack(self, targ, (bonus+self.level), WPN_KICK); quit; } dilend
---~---~---~---~---~---~---~---~---