/// <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); } }
/// <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; } }
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; } }