Atrinik Server 2.5
types/power_crystal.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 
00040 void apply_power_crystal(object *op, object *crystal)
00041 {
00042     int available_power = op->stats.sp - op->stats.maxsp;
00043     int power_space = crystal->stats.maxsp - crystal->stats.sp;
00044     int power_grab = 0;
00045 
00046     if (available_power >= 0 && power_space > 0)
00047     {
00048         power_grab = (int) MIN((float) power_space, ((float) 0.5 * (float) op->stats.sp));
00049     }
00050 
00051     if (available_power < 0 && crystal->stats.sp > 0)
00052     {
00053         power_grab = -MIN(-available_power, crystal->stats.sp);
00054     }
00055 
00056     op->stats.sp -= power_grab;
00057     crystal->stats.sp += power_grab;
00058     crystal->speed = (float) crystal->stats.sp / (float) crystal->stats.maxsp;
00059     update_ob_speed(crystal);
00060 
00061     if (op->type == PLAYER)
00062     {
00063         esrv_update_item(UPD_ANIMSPEED, op, crystal);
00064     }
00065 }