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.30 by pippijn, Mon Jan 15 21:06:18 2007 UTC vs.
Revision 1.36 by root, Tue Apr 24 12:32:14 2007 UTC

677 */ 677 */
678 678
679void 679void
680object::drain_stat () 680object::drain_stat ()
681{ 681{
682 drain_specific_stat (RANDOM () % NUM_STATS); 682 drain_specific_stat (rndm (NUM_STATS));
683} 683}
684 684
685void 685void
686object::drain_specific_stat (int deplete_stats) 686object::drain_specific_stat (int deplete_stats)
687{ 687{
755 return; 755 return;
756 756
757 /* Randomly change the players luck. Basically, we move it 757 /* Randomly change the players luck. Basically, we move it
758 * back neutral (if greater>0, subtract, otherwise add) 758 * back neutral (if greater>0, subtract, otherwise add)
759 */ 759 */
760 if (RANDOM () % (FABS (tmp->stats.luck)) >= RANDOM () % 30) 760 if (rndm (abs (tmp->stats.luck)) >= rndm (30))
761 { 761 {
762 int diff = tmp->stats.luck > 0 ? -1 : 1; 762 int diff = tmp->stats.luck > 0 ? -1 : 1;
763 763
764 stats.luck += diff; 764 stats.luck += diff;
765 tmp->stats.luck += diff; 765 tmp->stats.luck += diff;
818 * Updates all abilities given by applied objects in the inventory 818 * Updates all abilities given by applied objects in the inventory
819 * of the given object. Note: This function works for both monsters 819 * of the given object. Note: This function works for both monsters
820 * and players; the "player" in the name is purely an archaic inheritance. 820 * and players; the "player" in the name is purely an archaic inheritance.
821 * This functions starts from base values (archetype or player object) 821 * This functions starts from base values (archetype or player object)
822 * and then adjusts them according to what the player has equipped. 822 * and then adjusts them according to what the player has equipped.
823 */ 823 *
824
825/* July 95 - inserted stuff to handle new skills/exp system - b.t. 824 * July 95 - inserted stuff to handle new skills/exp system - b.t.
826 spell system split, grace points now added to system --peterm 825 * spell system split, grace points now added to system --peterm
827 */ 826 */
828
829void 827void
830object::update_stats () 828object::update_stats ()
831{ 829{
832 int i, j; 830 int i, j;
833 float f, max = 9, added_speed = 0, bonus_speed = 0, sp_tmp, speed_reduce_from_disease = 1; 831 float f, max = 9, added_speed = 0, bonus_speed = 0, sp_tmp, speed_reduce_from_disease = 1;
857 /* Don't clobber all the range_ values. range_golem otherwise 855 /* Don't clobber all the range_ values. range_golem otherwise
858 * gets reset for no good reason, and we don't want to reset 856 * gets reset for no good reason, and we don't want to reset
859 * range_magic (what spell is readied). These three below 857 * range_magic (what spell is readied). These three below
860 * well get filled in based on what the player has equipped. 858 * well get filled in based on what the player has equipped.
861 */ 859 */
862 contr->ranges[range_bow] = NULL; 860 contr->ranges[range_bow] = 0;
863 contr->ranges[range_misc] = NULL; 861 contr->ranges[range_misc] = 0;
864 contr->ranges[range_skill] = NULL; 862 contr->ranges[range_skill] = 0;
865 } 863 }
866 864
867 memcpy (body_used, body_info, sizeof (body_info)); 865 memcpy (body_used, body_info, sizeof (body_info));
868 866
869 slaying = 0; 867 slaying = 0;
926 speed = arch->clone.speed; 924 speed = arch->clone.speed;
927 925
928 /* OK - we've reset most all the objects attributes to sane values. 926 /* OK - we've reset most all the objects attributes to sane values.
929 * now go through and make adjustments for what the player has equipped. 927 * now go through and make adjustments for what the player has equipped.
930 */ 928 */
931
932 for (tmp = inv; tmp; tmp = tmp->below) 929 for (tmp = inv; tmp; tmp = tmp->below)
933 { 930 {
934 /* See note in map.c:update_position about making this additive 931 /* See note in map.c:update_position about making this additive
935 * since light sources are never applied, need to put check here. 932 * since light sources are never applied, need to put check here.
936 */ 933 */
1021 if (speed_reduce_from_disease == 0) 1018 if (speed_reduce_from_disease == 0)
1022 speed_reduce_from_disease = 1; 1019 speed_reduce_from_disease = 1;
1023 } 1020 }
1024 1021
1025 /* Pos. and neg. protections are counted seperate (-> pro/vuln). 1022 /* Pos. and neg. protections are counted seperate (-> pro/vuln).
1026 * (Negative protections are calculated extactly like positive.) 1023 * (Negative protections are calculated exactly like positive.)
1027 * Resistance from potions are treated special as well. If there's 1024 * Resistance from potions are treated special as well. If there's
1028 * more than one potion-effect, the bigger prot.-value is taken. 1025 * more than one potion-effect, the bigger prot.-value is taken.
1029 */ 1026 */
1030 if (tmp->type != POTION) 1027 if (tmp->type != POTION)
1031 { 1028 {
1040 potion_resist[i] = MAX (potion_resist[i], tmp->resist[i]); 1037 potion_resist[i] = MAX (potion_resist[i], tmp->resist[i]);
1041 else 1038 else
1042 potion_resist[i] = tmp->resist[i]; 1039 potion_resist[i] = tmp->resist[i];
1043 } 1040 }
1044 else if (tmp->resist[i] > 0) 1041 else if (tmp->resist[i] > 0)
1045 prot[i] += ((100 - prot[i]) * tmp->resist[i]) / 100; 1042 prot[i] += ((100 - prot[i]) * tmp->resist[i]) / 100;
1046 else if (tmp->resist[i] < 0) 1043 else if (tmp->resist[i] < 0)
1047 vuln[i] += ((100 - vuln[i]) * (-tmp->resist[i])) / 100; 1044 vuln[i] += ((100 - vuln[i]) * -tmp->resist[i]) / 100;
1048 } 1045 }
1049 } 1046 }
1050 1047
1051 /* There may be other things that should not adjust the attacktype */ 1048 /* There may be other things that should not adjust the attacktype */
1052 if (tmp->type != BOW && tmp->type != SYMPTOM) 1049 if (tmp->type != BOW && tmp->type != SYMPTOM)
1515 if (type == PLAYER) 1512 if (type == PLAYER)
1516 { 1513 {
1517 esrv_update_stats (contr); 1514 esrv_update_stats (contr);
1518 esrv_update_spells (contr); 1515 esrv_update_spells (contr);
1519 } 1516 }
1517
1518 // update the mapspace, if we are on a map
1519 if (!flag [FLAG_REMOVED] && map)
1520 map->at (x, y).flags_ = 0;
1520} 1521}
1521 1522
1522/* 1523/*
1523 * Returns true if the given player is a legal class. 1524 * Returns true if the given player is a legal class.
1524 * The function to add and remove class-bonuses to the stats doesn't 1525 * The function to add and remove class-bonuses to the stats doesn't
1951 del_exp = check_exp_loss (tmp, (sint64) (tmp->stats.exp * fraction)); 1952 del_exp = check_exp_loss (tmp, (sint64) (tmp->stats.exp * fraction));
1952 tmp->stats.exp -= del_exp; 1953 tmp->stats.exp -= del_exp;
1953 player_lvl_adj (op, tmp); 1954 player_lvl_adj (op, tmp);
1954 } 1955 }
1955 } 1956 }
1957
1956 if (flag != SK_SUBTRACT_SKILL_EXP) 1958 if (flag != SK_SUBTRACT_SKILL_EXP)
1957 { 1959 {
1958 del_exp = check_exp_loss (op, exp); 1960 del_exp = check_exp_loss (op, exp);
1959 op->stats.exp -= del_exp; 1961 op->stats.exp -= del_exp;
1960 player_lvl_adj (op, NULL); 1962 player_lvl_adj (op, NULL);
1961 } 1963 }
1962} 1964}
1963
1964
1965 1965
1966/* change_exp() - changes experience to a player/monster. This 1966/* change_exp() - changes experience to a player/monster. This
1967 * does bounds checking to make sure we don't overflow the max exp. 1967 * does bounds checking to make sure we don't overflow the max exp.
1968 * 1968 *
1969 * The exp passed is typically not modified much by this function - 1969 * The exp passed is typically not modified much by this function -
1970 * it is assumed the caller has modified the exp as needed. 1970 * it is assumed the caller has modified the exp as needed.
1971 * skill_name is the skill that should get the exp added. 1971 * skill_name is the skill that should get the exp added.
1972 * flag is what to do if player doesn't have the skill. 1972 * flag is what to do if player doesn't have the skill.
1973 * these last two values are only used for players. 1973 * these last two values are only used for players.
1974 */ 1974 */
1975
1976void 1975void
1977change_exp (object *op, sint64 exp, const char *skill_name, int flag) 1976change_exp (object *op, sint64 exp, const char *skill_name, int flag)
1978{ 1977{
1979 1978
1980#ifdef EXP_DEBUG 1979#ifdef EXP_DEBUG
2025 else 2024 else
2026 /* note that when you lose exp, it doesn't go against 2025 /* note that when you lose exp, it doesn't go against
2027 * a particular skill, so we don't need to pass that 2026 * a particular skill, so we don't need to pass that
2028 * along. 2027 * along.
2029 */ 2028 */
2030 subtract_player_exp (op, FABS (exp), skill_name, flag); 2029 subtract_player_exp (op, abs (exp), skill_name, flag);
2031
2032 } 2030 }
2033} 2031}
2034 2032
2035/* Applies a death penalty experience, the size of this is defined by the 2033/* Applies a death penalty experience, the size of this is defined by the
2036 * settings death_penalty_percentage and death_penalty_levels, and by the 2034 * settings death_penalty_percentage and death_penalty_levels, and by the

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines