Crossfire Server, Branch 1.12
R12190
|
00001 /* 00002 CrossFire, A Multiplayer game for X-windows 00003 00004 Copyright (C) 2007 Mark Wedel & Crossfire Development Team 00005 Copyright (C) 1992 Frank Tore Johansen 00006 00007 This program is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 2 of the License, or 00010 (at your option) any later version. 00011 00012 This program is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with this program; if not, write to the Free Software 00019 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00020 00021 The authors can be reached via e-mail at crossfire-devel@real-time.com 00022 */ 00023 00027 #include <global.h> 00028 #include <ob_methods.h> 00029 #include <ob_types.h> 00030 #include <sounds.h> 00031 #include <sproto.h> 00032 00033 static method_ret poison_type_apply(ob_methods *context, object *op, object *applier, int aflags); 00034 00038 void init_type_poison(void) { 00039 register_apply(POISON, poison_type_apply); 00040 } 00041 00050 static method_ret poison_type_apply(ob_methods *context, object *op, object *applier, int aflags) { 00051 /* If a player, let's tell them what happened */ 00052 if (applier->type == PLAYER) { 00053 play_sound_player_only(applier->contr, SOUND_TYPE_ITEM, op, 0, "poison"); 00054 draw_ext_info(NDI_UNIQUE, 0, applier, MSG_TYPE_APPLY, MSG_TYPE_APPLY_CURSED, 00055 "Yech! That tasted poisonous!", NULL); 00056 snprintf(applier->contr->killer, BIG_NAME, "poisonous %s", op->name); 00057 } 00058 /* If the 'hp' of the poison is greater than zero, use poison attacktype */ 00059 if (op->stats.hp > 0) { 00060 LOG(llevDebug, "Trying to poison player/monster for %d hp\n", op->stats.hp); 00061 hit_player(applier, op->stats.hp, op, AT_POISON, 1); 00062 } 00063 /* Reduce the applier's food to one quarter of what it was */ 00064 applier->stats.food -= applier->stats.food/4; 00065 handle_apply_yield(op); 00066 decrease_ob(op); 00067 return METHOD_OK; 00068 }