Atrinik Server 2.5
types/duplicator.c
Go to the documentation of this file.
00001 /************************************************************************
00002 *            Atrinik, a Multiplayer Online Role Playing Game            *
00003 *                                                                       *
00004 *    Copyright (C) 2009-2011 Alex Tokar and Atrinik Development Team    *
00005 *                                                                       *
00006 * Fork from Daimonin (Massive Multiplayer Online Role Playing Game)     *
00007 * and Crossfire (Multiplayer game for X-windows).                       *
00008 *                                                                       *
00009 * This program is free software; you can redistribute it and/or modify  *
00010 * it under the terms of the GNU General Public License as published by  *
00011 * the Free Software Foundation; either version 2 of the License, or     *
00012 * (at your option) any later version.                                   *
00013 *                                                                       *
00014 * This program is distributed in the hope that it will be useful,       *
00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00017 * GNU General Public License for more details.                          *
00018 *                                                                       *
00019 * You should have received a copy of the GNU General Public License     *
00020 * along with this program; if not, write to the Free Software           *
00021 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.             *
00022 *                                                                       *
00023 * The author can be reached at admin@atrinik.org                        *
00024 ************************************************************************/
00025 
00030 #include <global.h>
00031 
00041 void move_duplicator(object *op)
00042 {
00043     object *tmp;
00044 
00045     if (!op->slaying)
00046     {
00047         LOG(llevInfo, "Duplicator with no slaying! %d %d %s\n", op->x, op->y, op->map ? op->map->path : "<no map>");
00048         return;
00049     }
00050 
00051     for (tmp = GET_MAP_OB(op->map, op->x, op->y); tmp; tmp = tmp->above)
00052     {
00053         if (tmp->arch->name == op->slaying)
00054         {
00055             if (op->level <= 0)
00056             {
00057                 destruct_ob(tmp);
00058             }
00059             else
00060             {
00061                 uint64 new_nrof = (uint64) tmp->nrof * op->level;
00062 
00063                 if (new_nrof > SINT32_MAX)
00064                 {
00065                     new_nrof = SINT32_MAX;
00066                 }
00067 
00068                 tmp->nrof = new_nrof;
00069             }
00070 
00071             break;
00072         }
00073     }
00074 }