/// <summary>
        /// Sets a status param to the new value (str, agi, dex, vit, int, dex, luk)
        /// </summary>
        /// <param name="type"></param>
        /// <param name="value"></param>
        public void SetStat(EStatusParam type, short value)
        {
            switch (type)
            {
            case EStatusParam.Str:
                Str = value;
                break;

            case EStatusParam.Agi:
                Agi = value;
                break;

            case EStatusParam.Vit:
                Vit = value;
                break;

            case EStatusParam.Int:
                Int = value;
                break;

            case EStatusParam.Dex:
                Dex = value;
                break;

            case EStatusParam.Luk:
                Luk = value;
                break;
            }
        }
        /// <summary>
        /// Calculates the needed status points
        /// </summary>
        /// <param name="type"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public int CalcNeededStatusPoints(EStatusParam type, int value)
        {
            int low, high, sp = 0;

            if (value == 0)
            {
                return(0);
            }

            low  = GetStat(type);
            high = low + value;

            // Swap..
            if (value < 0)
            {
                int temp = high;
                high = low;
                low  = temp;
            }

            for (; low < high; low++)
            {
                sp += (1 + (low + 9) / 10);
            }

            return(sp);
        }
        /// <summary>
        /// Returns a status param by type (str, agi, dex, vit, int, dex, luk)
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public int GetStat(EStatusParam type)
        {
            switch (type)
            {
            case EStatusParam.Str:
                return(Str);

            case EStatusParam.Agi:
                return(Agi);

            case EStatusParam.Vit:
                return(Vit);

            case EStatusParam.Int:
                return(Int);

            case EStatusParam.Dex:
                return(Dex);

            case EStatusParam.Luk:
                return(Luk);

            default:
                return(-1);
            }
        }
示例#4
0
		/// <summary>
		/// Calculates the needed status points
		/// </summary>
		/// <param name="type"></param>
		/// <param name="value"></param>
		/// <returns></returns>
		public int CalcNeededStatusPoints(EStatusParam type, int value) {
			int low, high, sp = 0;

			if (value == 0) {
				return 0;
			}

			low = GetStat(type);
			high = low + value;

			// Swap..
			if (value < 0) {
				int temp = high;
				high = low;
				low = temp;
			}

			for (; low < high; low++) {
				sp += (1 + (low + 9) / 10);
			}

			return sp;
		}
示例#5
0
		/// <summary>
		/// Sets a status param to the new value (str, agi, dex, vit, int, dex, luk)
		/// </summary>
		/// <param name="type"></param>
		/// <param name="value"></param>
		public void SetStat(EStatusParam type, short value) {
			switch (type) {
				case EStatusParam.Str:
					Str = value;
					break;
				case EStatusParam.Agi:
					Agi = value;
					break;
				case EStatusParam.Vit:
					Vit = value;
					break;
				case EStatusParam.Int:
					Int = value;
					break;
				case EStatusParam.Dex:
					Dex = value;
					break;
				case EStatusParam.Luk:
					Luk = value;
					break;
			}
		}
示例#6
0
		/// <summary>
		/// Returns a status param by type (str, agi, dex, vit, int, dex, luk)
		/// </summary>
		/// <param name="type"></param>
		/// <returns></returns>
		public int GetStat(EStatusParam type) {
			switch (type) {
				case EStatusParam.Str:
					return Str;
				case EStatusParam.Agi:
					return Agi;
				case EStatusParam.Vit:
					return Vit;
				case EStatusParam.Int:
					return Int;
				case EStatusParam.Dex:
					return Dex;
				case EStatusParam.Luk:
					return Luk;
				default:
					return -1;
			}
		}
示例#7
0
        public WorldUpdateStatus(Character c, EStatusParam type)
            : base(0xb0)
        {
            // For misc calculation
            int len = 0;

            Write((short)type);
            switch (type)
            {
            case EStatusParam.Weight:
                // TODO: update ow50/ow90 state here
                Write((int)c.Weight);
                break;

            case EStatusParam.Maxweight:
                Write((int)c.MaxWeight);
                break;

            case EStatusParam.Speed:
                Write((int)c.BattleStatus.Speed);
                break;

            case EStatusParam.Baselevel:
                Write((int)c.Status.LevelBase);
                break;

            case EStatusParam.Joblevel:
                Write((int)c.Status.LevelJob);
                break;

            case EStatusParam.Karma:
                Write((int)c.Status.Karma);
                break;

            case EStatusParam.Manner:
                Write((int)c.Status.Manner);
                break;

            case EStatusParam.Statuspoint:
                Write((int)c.Status.StatusPoints);
                break;

            case EStatusParam.Skillpoint:
                Write((int)c.Status.SkillPoints);
                break;

            case EStatusParam.Hit:
                Write((int)c.BattleStatus.Hit);
                break;

            case EStatusParam.Flee1:
                Write((int)c.BattleStatus.Flee);
                break;

            case EStatusParam.Flee2:
                Write((int)(c.BattleStatus.Flee2 / 10));
                break;

            case EStatusParam.Maxhp:
                Write((int)c.BattleStatus.HPMax);
                break;

            case EStatusParam.Maxsp:
                Write((int)c.BattleStatus.SPMax);
                break;

            case EStatusParam.Hp:
                Write((int)c.BattleStatus.HP);
                //if (battle_config.disp_hpmeter)
                //	clif_hpmeter(sd);
                //if (!battle_config.party_hp_mode && sd->status.party_id)
                //	clif_party_hp(sd);
                //if (sd->bg_id)
                //	clif_bg_hp(sd);
                break;

            case EStatusParam.Sp:
                Write((int)c.BattleStatus.SP);
                break;

            case EStatusParam.Aspd:
                Write((int)c.BattleStatus.AMotion);
                break;

            case EStatusParam.Atk1:
                //WFIFOL(fd, 4) = sd->battle_status.batk + sd->battle_status.rhw.atk + sd->battle_status.lhw.atk;
                Write((int)c.BattleStatus.AtkBase);
                break;

            case EStatusParam.Def1:
                Write((int)c.BattleStatus.Def);
                break;

            case EStatusParam.Mdef1:
                Write((int)c.BattleStatus.MDef);
                break;

            case EStatusParam.Atk2:
                //WFIFOL(fd, 4) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2;
                break;

            case EStatusParam.Def2:
                Write((int)c.BattleStatus.Def2);
                break;

            case EStatusParam.Mdef2:
                //negative check (in case you have something like Berserk active)
                len = (c.BattleStatus.MDef2 - (c.BattleStatus.Vit >> 1));
                if (len < 0)
                {
                    len = 0;
                }
                Write((int)len);
                len = 0;
                break;

            case EStatusParam.Critical:
                Write((int)(c.BattleStatus.Crit / 10));
                break;

            case EStatusParam.Matk1:
                Write((int)c.BattleStatus.MagicAtkMax);
                break;

            case EStatusParam.Matk2:
                Write((int)c.BattleStatus.MagicAtkMin);
                break;


            // Another packet: 0xb1
            case EStatusParam.Zeny:
                PacketID = 0xb1;
                Write((int)c.Status.Zeny);
                break;

            case EStatusParam.Baseexp:
                PacketID = 0xb1;
                Write((int)c.Status.ExpBase);
                break;

            case EStatusParam.Jobexp:
                PacketID = 0xb1;
                Write((int)c.Status.ExpJob);
                break;

            case EStatusParam.Nextbaseexp:
                PacketID = 0xb1;
                Write((int)10);                         // TODO: pc_nextbaseexp()
                break;

            case EStatusParam.Nextjobexp:
                PacketID = 0xb1;
                Write((int)10);                         // TODO: pc_nextjobexp()
                break;

            // Another packet: 0xbe
            case EStatusParam.Ustr:
            case EStatusParam.Uagi:
            case EStatusParam.Uvit:
            case EStatusParam.Uint:
            case EStatusParam.Udex:
            case EStatusParam.Uluk:
                PacketID = 0xbe;
                //WFIFOB(fd, 4) = pc_need_status_point(sd, type - SP_USTR + SP_STR, 1);
                len = 5;
                break;

            // Another packet: 0x013a
            case EStatusParam.Attackrange:
                PacketID = 0x013a;
                //WFIFOW(fd, 2) = sd->battle_status.rhw.range;
                len = 4;
                break;

            // Another packet: 0141
            case EStatusParam.Str:
                PacketID = 0x141a;
                Write((int)c.Status.Str);
                Write((int)(c.BattleStatus.Str - c.Status.Str));
                len = 14;
                break;

            case EStatusParam.Agi:
                PacketID = 0x141a;
                Write((int)c.Status.Agi);
                Write((int)(c.BattleStatus.Agi - c.Status.Agi));
                len = 14;
                break;

            case EStatusParam.Vit:
                PacketID = 0x141a;
                Write((int)c.Status.Vit);
                Write((int)(c.BattleStatus.Vit - c.Status.Vit));
                len = 14;
                break;

            case EStatusParam.Int:
                PacketID = 0x141a;
                Write((int)c.Status.Int);
                Write((int)(c.BattleStatus.Int - c.Status.Int));
                len = 14;
                break;

            case EStatusParam.Dex:
                PacketID = 0x141a;
                Write((int)c.Status.Dex);
                Write((int)(c.BattleStatus.Dex - c.Status.Dex));
                len = 14;
                break;

            case EStatusParam.Luk:
                PacketID = 0x141a;
                Write((int)c.Status.Luk);
                Write((int)(c.BattleStatus.Luk - c.Status.Luk));
                len = 14;
                break;

            // Another packet: 0x121
            case EStatusParam.Cartinfo:
                // Completly different..
                Writer.Position = 0;
                Write((short)0x121);
                Write((short)c.CartNum);
                Write((short)Global.MAX_CART);
                Write((int)c.CartWeight);
                Write((int)8000);                         // battle_config.max_cart_weight;
                len = 14;
                break;

            default:
                ServerConsole.ErrorLine("Unknown StatusParam: " + type);
                break;
            }
        }