コード例 #1
0
        public GenericStats GenerateStats(bool Max = false)
        {
            var GeneratedStats = new GenericStats();

            if (StatsTemplate == string.Empty) // aucun stats
            {
                return(GeneratedStats);
            }

            // On initialise si c'est pas deja fait
            if (this.myRandomStats == null)
            {
                this.myRandomStats = new Dictionary <int, RandomJet>();

                foreach (var Effect in this.StatsTemplate.Split(','))
                {
                    var effectDatas  = Effect.Split('#');
                    var effectId     = int.Parse(effectDatas[0], System.Globalization.NumberStyles.HexNumber);
                    var effectMinJet = int.Parse(effectDatas[1], System.Globalization.NumberStyles.HexNumber);
                    var effectMaxJet = int.Parse(effectDatas[2], System.Globalization.NumberStyles.HexNumber);
                    if (IsWeaponEffect((EffectEnum)effectId))
                    {
                        int Min  = int.Parse(effectDatas[1], System.Globalization.NumberStyles.HexNumber);
                        int Maxx = int.Parse(effectDatas[2], System.Globalization.NumberStyles.HexNumber);

                        string Args  = Min + ";" + Maxx + ";-1;-1;0;" + effectDatas[4];
                        int    Value = 0;
                        if (effectDatas.Length > 4)
                        {
                            Value = int.Parse(effectDatas[4].Split('+')[1]);
                        }
                        try
                        {
                            GeneratedStats.AddWeaponEffect((EffectEnum)effectId, Min, Maxx, Args, Value);
                        }
                        catch (System.ArgumentException e1)
                        {
                            Logger.Error("Item " + ID + " has Double WeaponEffectID " + (EffectEnum)effectId);
                            continue;
                        }
                        continue;
                    }
                    this.myRandomStats.Add(effectId, new RandomJet(effectId, effectMinJet, effectMaxJet));
                }
            }

            // On recupere des jets au hasard
            foreach (var Effect in this.myRandomStats.Values)
            {
                //if (IsWeaponEffect((EffectEnum)Effect.EffectId))
                //  continue;

                GeneratedStats.AddItem((EffectEnum)Effect.EffectId, Max ? (Effect.Max == 0 ? Effect.Min : Effect.Max) : Effect.GetRandomJet());
            }

            return(GeneratedStats);
        }
コード例 #2
0
ファイル: StaticMountTable.cs プロジェクト: 745c5412/tera-emu
        public static GenericStats getMountStats(int color, int lvl)
        {
            GenericStats stats = new GenericStats();
            List <Couple <int, Double> > statsNbr = StatsByMount[color];

            if (statsNbr != null)
            {
                foreach (Couple <int, Double> stat in statsNbr)
                {
                    //if (0 > (int)(lvl / stat.second)) continue;
                    stats.AddItem((EffectEnum)stat.first, (int)(lvl / stat.second));
                }
            }
            return(stats);
        }
コード例 #3
0
ファイル: ItemSetModel.cs プロジェクト: 745c5412/tera-emu
        public void Initialize()
        {
            if (myInitialized)
            {
                return;
            }

            Items = new List <ItemTemplateModel>();

            foreach (String str in StringItems.Split(','))
            {
                try
                {
                    Items.Add(ItemTemplateTable.GetTemplate(int.Parse(str)));
                }
                catch (NullReferenceException e) { Logger.Error("Item " + str + " Introuvable dans la panoplie " + ID); }
                catch (FormatException e) { Logger.Error("Echoue lors de la convertion de l'item " + str); }
            }

            Stats = new List <GenericStats>();
            foreach (String str in StringBonus.Split(';'))
            {
                var stats = new GenericStats();

                foreach (String str2 in str.Split(','))
                {
                    try
                    {
                        String[] infos = str2.Split(':');
                        if (infos.Length < 2)
                        {
                            continue;
                        }
                        stats.AddItem((EffectEnum)int.Parse(infos[0], NumberStyles.Number, CultureInfo.InvariantCulture), int.Parse(infos[1], NumberStyles.Number, CultureInfo.InvariantCulture));
                    }
                    catch (FormatException e) { Logger.Error(str2.Split(':')[0] + "|" + str2.Split(':')[1] + ""); }
                }
                Stats.Add(stats);
            }
            myInitialized = true;
        }
コード例 #4
0
ファイル: ExchangeHandler.cs プロジェクト: 745c5412/tera-emu
        private static void ProcessExchangeMountParkRequest(WorldClient Client, string Packet)
        {
            MountPark MP = Client.Character.inMountPark;

            if (MP != null)
            {
                char c = Packet[2];
                Packet = Packet.Substring(3);
                int guid = -1;
                try
                {
                    guid = int.Parse(Packet);
                }
                catch (Exception e)
                {
                };
                switch (c)
                {
                case 'C':    //Parcho => Etable (Stocker)
                    if (guid == -1 || !Client.Character.InventoryCache.hasItemGuid(guid))
                    {
                        return;
                    }
                    InventoryItemModel obj = Client.Character.InventoryCache.GetItem(guid);

                    //on prend la DD demandée
                    int   DDid = -1;
                    Mount DD   = null;
                    if (obj.GetStats().HasEffect(EffectEnum.MountOwner))
                    {
                        DDid = obj.GetStats().GetEffect(EffectEnum.MountOwner).Items;
                        DD   = MountTable.getMount(DDid);
                    }
                    //FIXME mettre return au if pour ne pas créer des nouvelles dindes
                    if (DD == null)
                    {
                        int color = StaticMountTable.getMountColorByParchoTemplate(obj.TemplateID);
                        if (color < 1)
                        {
                            return;
                        }
                        DD = new Mount(color);
                    }
                    DD.Intialize();

                    //On enleve l'Item du Monde et du Perso
                    Client.Character.InventoryCache.remove(guid);
                    InventoryItemTable.removeItem(guid);
                    //on ajoute la dinde a l'étable
                    Client.Account.Data.Mounts.Add(DD.ID, DD);
                    Client.Account.Data.Save();

                    //On envoie les Packet
                    Client.Send(new ObjectRemoveMessage(obj.ID));
                    Client.Send(new ExchangeEndMessage('+', DD.parse()));
                    break;

                case 'c':    //Etable => Parcho(Echanger)
                    Mount DD1 = MountTable.getMount(guid);
                    //S'il n'a pas la dinde
                    if (!Client.Account.Data.Mounts.ContainsKey(DD1.ID) || DD1 == null)
                    {
                        return;
                    }
                    //on retire la dinde de l'étable
                    Client.Account.Data.Mounts.Remove(DD1.ID);

                    GenericStats Stat = new GenericStats();
                    Stat.AddItem(EffectEnum.MountOwner, DD1.ID);
                    Stat.AddSpecialEffect(EffectEnum.MountOwnerName, Client.Character.Name);
                    Stat.AddSpecialEffect(EffectEnum.MountName, DD1.Name);

                    var item = InventoryItemTable.TryCreateItem(StaticMountTable.getMountScroll(DD1.get_color()).ID, Client.Character, 1, -1, Stat.ToItemStats());

                    Client.Send(new ExchangeEndMessage('-', DD1.ID + ""));
                    Stat = null;
                    break;

                case 'g':    //Equiper
                    Mount DD3 = MountTable.getMount(guid);
                    //S'il n'a pas la dinde
                    if (DD3 == null || !Client.Account.Data.Mounts.ContainsKey(DD3.ID) || Client.Character.Mount != null)
                    {
                        return;
                    }
                    DD3.Intialize();
                    Client.Account.Data.Mounts.Remove(DD3.ID);
                    Client.Account.Data.Save();
                    Client.Character.Mount = DD3;

                    //Packets
                    Client.Send(new CharacterRideEventMessage("+", DD3));
                    Client.Send(new ExchangeEndMessage('-', DD3.ID + ""));
                    Client.Send(new CharacterMountXpGive(Client.Character.MountXPGive));
                    break;

                case 'p':    //Equipé => Stocker
                    //Si c'est la dinde équipé
                    if (Client.Character.Mount != null ? Client.Character.Mount.ID == guid : false)
                    {
                        //Si le perso est sur la monture on le fait descendre
                        if (Client.Character.isOnMount())
                        {
                            Client.Character.toogleOnMount();
                        }
                        //Si ca n'a pas réussie, on s'arrete là (Items dans le sac ?)
                        if (Client.Character.isOnMount())
                        {
                            return;
                        }

                        Mount DD2 = Client.Character.Mount;
                        DD2.Intialize();
                        Client.Account.Data.Mounts.Add(DD2.ID, DD2);
                        Client.Account.Data.Save();
                        Client.Character.Mount = null;

                        //Packets
                        Client.Send(new ExchangeEndMessage('+', DD2.parse()));
                        Client.Send(new CharacterRideEventMessage("-", null));
                        Client.Send(new CharacterMountXpGive(Client.Character.MountXPGive));
                    }
                    else    //Sinon...
                    {
                    }
                    break;
                }
            }
            else
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }
        }