ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/living.C
(Generate patch)

Comparing deliantra/server/common/living.C (file contents):
Revision 1.126 by root, Tue Jan 3 11:25:31 2012 UTC vs.
Revision 1.129 by root, Mon Nov 12 03:14:32 2012 UTC

1/* 1/*
2 * This file is part of Deliantra, the Roguelike Realtime MMORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team 4 * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992 Frank Tore Johansen 6 * Copyright (©) 1992 Frank Tore Johansen
7 * 7 *
8 * Deliantra is free software: you can redistribute it and/or modify it under 8 * Deliantra is free software: you can redistribute it and/or modify it under
9 * the terms of the Affero GNU General Public License as published by the 9 * the terms of the Affero GNU General Public License as published by the
10 * Free Software Foundation, either version 3 of the License, or (at your 10 * Free Software Foundation, either version 3 of the License, or (at your
11 * option) any later version. 11 * option) any later version.
12 * 12 *
13 * This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details. 16 * GNU General Public License for more details.
17 * 17 *
18 * You should have received a copy of the Affero GNU General Public License 18 * You should have received a copy of the Affero GNU General Public License
19 * and the GNU General Public License along with this program. If not, see 19 * and the GNU General Public License along with this program. If not, see
20 * <http://www.gnu.org/licenses/>. 20 * <http://www.gnu.org/licenses/>.
21 * 21 *
22 * The authors can be reached via e-mail to <support@deliantra.net> 22 * The authors can be reached via e-mail to <support@deliantra.net>
23 */ 23 */
24 24
25#include <global.h> 25#include <global.h>
26 26
108 * These limits are probably overly generous, but being there were no values 108 * These limits are probably overly generous, but being there were no values
109 * before, you need to start someplace. 109 * before, you need to start someplace.
110 */ 110 */
111 111
112const uint32 weight_limit[MAX_STAT + 1] = { 112const uint32 weight_limit[MAX_STAT + 1] = {
113 200000, /* 0 */ 113 200000, /* 0 */
114 250000, 300000, 350000, 400000, 500000, /* 5 */ 114 250000, 300000, 350000, 400000, 500000, /* 5 */
115 600000, 700000, 800000, 900000, 1000000, /* 10 */ 115 600000, 700000, 800000, 900000, 1000000, /* 10 */
116 1100000, 1200000, 1300000, 1400000, 1500000, /* 15 */ 116 1100000, 1200000, 1300000, 1400000, 1500000, /* 15 */
117 1650000, 1800000, 1950000, 2100000, 2250000, /* 20 */ 117 1650000, 1800000, 1950000, 2100000, 2250000, /* 20 */
118 2400000, 2550000, 2700000, 2850000, 3000000, /* 25 */ 118 2400000, 2550000, 2700000, 2850000, 3000000, /* 25 */
119 3250000, 3500000, 3750000, 4000000, 4500000 /*30 */ 119 3250000, 3500000, 3750000, 4000000, 4500000 /* 30 */
120}; 120};
121 121
122const int learn_spell[MAX_STAT + 1] = { 122const int learn_spell[MAX_STAT + 1] = {
123 0, 0, 0, 1, 2, 4, 8, 12, 16, 25, 36, 45, 55, 65, 70, 75, 80, 85, 90, 95, 100, 100, 100, 100, 100, 123 0, 0, 0, 1, 2, 4, 8, 12, 16, 25, 36, 45, 55, 65, 70, 75, 80, 85, 90, 95, 100, 100, 100, 100, 100,
124 100, 100, 100, 100, 100, 100 124 100, 100, 100, 100, 100, 100
729 * spell system split, grace points now added to system --peterm 729 * spell system split, grace points now added to system --peterm
730 */ 730 */
731void 731void
732object::update_stats () 732object::update_stats ()
733{ 733{
734 float f, max_speed = 9, added_speed = 0, bonus_speed = 0, speed_reduce_from_disease = 1; 734 float max_speed = 9, added_speed = 0, bonus_speed = 0, speed_reduce_from_disease = 1;
735 int weapon_weight = 0, weapon_speed = 0; 735 int weapon_weight = 0, weapon_speed = 0;
736 int best_wc = 0, best_ac = 0, wc = 0, ac = 0; 736 int best_wc = 0, best_ac = 0, wc = 0, ac = 0;
737 int prot[NROFATTACKS], vuln[NROFATTACKS], potion_resist[NROFATTACKS]; 737 int prot[NROFATTACKS], vuln[NROFATTACKS], potion_resist[NROFATTACKS];
738 object *grace_obj = NULL, *mana_obj = NULL, *tmp; 738 object *grace_obj = NULL, *mana_obj = NULL, *tmp;
739 float old_speed = speed; 739 float old_speed = speed;
996 996
997 if (tmp->stats.ac) 997 if (tmp->stats.ac)
998 ac -= tmp->stats.ac + tmp->magic; 998 ac -= tmp->stats.ac + tmp->magic;
999 999
1000 if (settings.spell_encumbrance == TRUE && type == PLAYER) 1000 if (settings.spell_encumbrance == TRUE && type == PLAYER)
1001 contr->encumbrance += 3 * tmp->weight / 1000; 1001 contr->encumbrance += weight_to_kg_approx (3 * tmp->weight);
1002 } 1002 }
1003 1003
1004 break; 1004 break;
1005 1005
1006 case SHIELD: 1006 case SHIELD:
1007 if (settings.spell_encumbrance == TRUE && type == PLAYER) 1007 if (settings.spell_encumbrance == TRUE && type == PLAYER)
1008 contr->encumbrance += tmp->weight / 2000; 1008 contr->encumbrance += weight_to_kg_approx (tmp->weight) >> 1;
1009 //FALLTHROUGH 1009 //FALLTHROUGH
1010 case RING: 1010 case RING:
1011 case AMULET: 1011 case AMULET:
1012 case GIRDLE: 1012 case GIRDLE:
1013 case HELMET: 1013 case HELMET:
1047 * go. 1047 * go.
1048 */ 1048 */
1049 1049
1050 if (type == PLAYER) 1050 if (type == PLAYER)
1051 if (settings.spell_encumbrance) 1051 if (settings.spell_encumbrance)
1052 contr->encumbrance += tmp->weight * 3 / 1000; 1052 contr->encumbrance += weight_to_kg_approx (3 * tmp->weight);
1053 1053
1054 break; 1054 break;
1055 1055
1056 case ARMOUR: /* Only the best of these three are used: */ 1056 case ARMOUR: /* Only the best of these three are used: */
1057 if (settings.spell_encumbrance == TRUE && type == PLAYER) 1057 if (settings.spell_encumbrance == TRUE && type == PLAYER)
1058 contr->encumbrance += tmp->weight / 1000; 1058 contr->encumbrance += weight_to_kg_approx (tmp->weight);
1059 1059
1060 case BRACERS: 1060 case BRACERS:
1061 case FORCE: 1061 case FORCE:
1062 if (tmp->stats.wc) 1062 if (tmp->stats.wc)
1063 { 1063 {
1289 /* f is a number the represents the number of kg above (positive num) 1289 /* f is a number the represents the number of kg above (positive num)
1290 * or below (negative number) that the player is carrying. If above 1290 * or below (negative number) that the player is carrying. If above
1291 * weight limit, then player suffers a speed reduction based on how 1291 * weight limit, then player suffers a speed reduction based on how
1292 * much above he is, and what is max carry is 1292 * much above he is, and what is max carry is
1293 */ 1293 */
1294 float f = (carrying / 1000) - max_carry[stats.Str]; 1294 double f = weight_to_kg_approx (carrying) - max_carry[stats.Str];
1295 if (f > 0.f) 1295 if (f > 0.f)
1296 speed = speed / (1.f + f / max_carry[stats.Str]); 1296 speed /= (1.f + f / max_carry[stats.Str]);
1297 } 1297 }
1298 1298
1299 speed += bonus_speed / 10.f; /* Not affected by limits */ 1299 speed += bonus_speed / 10.f; /* Not affected by limits */
1300 speed *= speed_reduce_from_disease; 1300 speed *= speed_reduce_from_disease;
1301 1301
1649static void 1649static void
1650add_player_exp (object *op, sint64 exp, shstr_tmp skill_name, int flag) 1650add_player_exp (object *op, sint64 exp, shstr_tmp skill_name, int flag)
1651{ 1651{
1652 object *skill_obj; 1652 object *skill_obj;
1653 sint64 limit, exp_to_add; 1653 sint64 limit, exp_to_add;
1654 int i;
1655 1654
1656 /* prevents some forms of abuse. */ 1655 /* prevents some forms of abuse. */
1657 if (op->contr->braced) 1656 if (op->contr->braced)
1658 exp /= 5; 1657 exp /= 5;
1659 1658

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines