public void FreeLockedEp(Account account, int amount)
        {
            var deletedCharacters = GetDeletedCharacters(account).Select(c => c.Id).ToList();

            var deleteIds      = new List <int>();
            var pointsToDelete = amount;

            if (deletedCharacters.Count <= 0)
            {
                return;
            }

            var entries = Db.Query().CommandText($"select id,points from accountextensionspent where accountid=@accountID and characterid in ({deletedCharacters.ArrayToString()})")
                          .SetParameter("@accountID", account.Id)
                          .Execute().Select(r => new KeyValuePair <int, int>(r.GetValue <int>(0), r.GetValue <int>(1)))
                          .ToList();
            var allLocked = entries.Sum(l => l.Value);

            if (allLocked < amount)
            {
                throw new PerpetuumException(ErrorCodes.InputTooHigh);
            }
            foreach (var keyValuePair in entries)
            {
                var id     = keyValuePair.Key;
                var points = keyValuePair.Value;

                if (pointsToDelete < points)
                {
                    //update and exit loop

                    Db.Query().CommandText("update accountextensionspent set points=@newPoints where id=@id")
                    .SetParameter("@id", id)
                    .SetParameter("@newPoints", points - pointsToDelete)
                    .ExecuteNonQuery();

                    break;
                }

                //consume the entry and continue

                pointsToDelete -= points;

                //collect ids to delete
                deleteIds.Add(id);

                if (pointsToDelete <= 0)
                {
                    //required amount was found
                    break;
                }
            }

            if (deleteIds.Count > 0)
            {
                Db.Query().CommandText($"delete accountextensionspent where id in ({deleteIds.ArrayToString()})").ExecuteNonQuery();
            }
        }
Esempio n. 2
0
    public void FromPreset(GenericPreset source)
    {
        properties = new List <GenericPreset.Property> ();

        foreach (GenericPreset.Property property in source.properties)
        {
            properties.Add(property.Clone());
        }

        Debug.LogFormat("FromPreset {0}", properties.ArrayToString());
    }
Esempio n. 3
0
        public static string ToInsertString(this IEnumerable <KeyValuePair <string, object> > dictionary, string tableName, string exceptKey = null)
        {
            var listKeys   = new List <string>();
            var listValues = new List <object>();

            foreach (var pair in dictionary)
            {
                if (exceptKey != null && pair.Key == exceptKey)
                {
                    continue;
                }

                listKeys.Add(pair.Key);
                listValues.Add(pair.Value);
            }

            return("insert " + tableName + " (" + listKeys.ArrayToString() + ") values (" + listValues.ArrayToValueString() + ")");
        }
Esempio n. 4
0
        public static void Run()
        {
            var points = new List<Point>
            {
                // C# 3.0 のコレクション初期化子
                // List.Add(Point) が呼ばれてる
                // 1行1行 new Point を書くのがめんどいことがある
                new Point(3, 4),
                new Point(-1, 0),
                new Point(5, -2),
                new Point(7, 6),
                new Point(0, 0)
            };

            // Console. やら PointJson. やら、横に間延びしがち
            Console.WriteLine(points.ArrayToString());
            var json = PointJson.ToJson(points).ToString();
            Console.WriteLine(json);
            Console.WriteLine(PointJson.ParseArray(json).ArrayToString());
        }
Esempio n. 5
0
        public static void Run()
        {
            var points = new List<Point>
            {
                // List.Add を呼んでいることには変わりないのだけども
                // C#vNext では拡張メソッドでも OK になった
                // ここで実際に呼ばれているのは PointExtensions.Add(this IList<Point>, int, int)
                { 3, 4 },
                { -1, 0 },
                { 5, -2 },
                { 7, 6 },
                { 0, 0 }
            };

            // using System.Console ってやると、その C# ファイル内では Console. を省略できる
            // 拡張メソッド同様、実際にどこで定義されているメソッドかわかりにくくなるって問題もあるのでやたらと使いたい機能ではないけども、便利な場面も結構あるはず
            WriteLine(points.ArrayToString());
            var json = ToJson(points).ToString();
            WriteLine(json);
            WriteLine(ParseArray(json).ArrayToString());
        }
Esempio n. 6
0
        public static void Run()
        {
            var points = new List <Point>
            {
                // C# 3.0 のコレクション初期化子
                // List.Add(Point) が呼ばれてる
                // 1行1行 new Point を書くのがめんどいことがある
                new Point(3, 4),
                new Point(-1, 0),
                new Point(5, -2),
                new Point(7, 6),
                new Point(0, 0)
            };

            // Console. やら PointJson. やら、横に間延びしがち
            Console.WriteLine(points.ArrayToString());
            var json = PointJson.ToJson(points).ToString();

            Console.WriteLine(json);
            Console.WriteLine(PointJson.ParseArray(json).ArrayToString());
        }
Esempio n. 7
0
        public static void Run()
        {
            var points = new List <Point>
            {
                // List.Add を呼んでいることには変わりないのだけども
                // C#vNext では拡張メソッドでも OK になった
                // ここで実際に呼ばれているのは PointExtensions.Add(this IList<Point>, int, int)
                { 3, 4 },
                { -1, 0 },
                { 5, -2 },
                { 7, 6 },
                { 0, 0 }
            };

            // using System.Console ってやると、その C# ファイル内では Console. を省略できる
            // 拡張メソッド同様、実際にどこで定義されているメソッドかわかりにくくなるって問題もあるのでやたらと使いたい機能ではないけども、便利な場面も結構あるはず
            WriteLine(points.ArrayToString());
            var json = ToJson(points).ToString();

            WriteLine(json);
            WriteLine(ParseArray(json).ArrayToString());
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;

                var primaryactivity   = request.Data.GetOrDefault(k.primaryActivity, -1);
                var primaryzone       = request.Data.GetOrDefault(k.zoneID, -1);
                var primarybase       = request.Data.GetOrDefault(k.baseEID, (long)-1);
                var orientation       = request.Data.GetOrDefault(k.orientation, -1);
                var lookingfor        = request.Data.GetOrDefault(k.lookingFor, -1);
                var preferredfaction  = request.Data.GetOrDefault(k.preferredFaction, -1);
                var providesinsurance = request.Data.GetOrDefault(k.providesInsurance, -1);
                var timezone          = request.Data.GetOrDefault(k.timeZone, -1);
                var requiredactivity  = request.Data.GetOrDefault(k.requiredActivity, -1);
                var communication     = request.Data.GetOrDefault(k.communication, -1);
                var services          = request.Data.GetOrDefault(k.services, -1);

                var updateList = new List <string>();
                var insertDict = new Dictionary <string, object>();

                var corporationeid = character.CorporationEid;

                DefaultCorporationDataCache.IsCorporationDefault(corporationeid).ThrowIfTrue(ErrorCodes.CharacterMustBeInPrivateCorporation);

                var role = Corporation.GetRoleFromSql(character);
                role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.HRManager, CorporationRole.PRManager).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

                var update = false;

                var query = Db.Query();

                var id = query.CommandText("select id from yellowpages where corporationeid=@corporationeid")
                         .SetParameter("@corporationeid", corporationeid)
                         .ExecuteScalar <int>();

                if (id > 0)
                {
                    update = true;
                }

                insertDict.Add("corporationeid", corporationeid);

                if (primaryactivity >= 0)
                {
                    insertDict.Add("primaryactivity", primaryactivity);
                    updateList.Add("primaryactivity=@primaryactivity ");
                    query.SetParameter("@primaryactivity", primaryactivity);
                }

                if (primaryzone >= 0)
                {
                    _zoneManager.ContainsZone(primaryzone).ThrowIfFalse(ErrorCodes.ZoneNotFound);
                    insertDict.Add("zoneID", primaryzone);
                    updateList.Add("zoneID = @primaryzone ");
                    query.SetParameter("@primaryzone", primaryzone);
                }

                //set explicitely on the client
                if (request.Data.ContainsKey(k.zoneID) && primaryzone == -1)
                {
                    updateList.Add("zoneID = NULL ");
                }

                //na ezert nem lehet pbs base-t a yellow pagesbe beallitani
                if (primarybase > 0)
                {
                    var dockingBase = _dockingBaseHelper.GetDockingBase(primarybase);
                    insertDict.Add("baseEID", dockingBase.Eid);
                    updateList.Add("baseEID = @primarybase ");
                    query.SetParameter("@primarybase", primarybase);
                }

                if (request.Data.ContainsKey(k.baseEID) && primarybase == -1)
                {
                    updateList.Add("baseEID = NULL ");
                }

                if (orientation >= 0)
                {
                    insertDict.Add("orientation", orientation);
                    updateList.Add("orientation=@orientation ");
                    query.SetParameter("@orientation", orientation);
                }

                if (lookingfor >= 0)
                {
                    insertDict.Add("lookingfor", lookingfor);
                    updateList.Add("lookingfor=@lookingfor ");
                    query.SetParameter("@lookingfor", lookingfor);
                }

                if (preferredfaction >= 0)
                {
                    insertDict.Add("preferredfaction", preferredfaction);
                    updateList.Add("preferredfaction = @preferredfaction ");
                    query.SetParameter("@preferredfaction", preferredfaction);
                }

                if (request.Data.ContainsKey(k.preferredFaction) && preferredfaction == -1)
                {
                    updateList.Add("preferredfaction = NULL ");
                }

                if (providesinsurance >= 0)
                {
                    insertDict.Add("providesinsurance", providesinsurance);
                    updateList.Add("providesinsurance=@providesinsurance ");
                    query.SetParameter("@providesinsurance", providesinsurance);
                }

                if (timezone >= 0)
                {
                    insertDict.Add("timezone", timezone);
                    updateList.Add("timezone=@timezone ");
                    query.SetParameter("@timezone", timezone);
                }

                if (requiredactivity >= 0)
                {
                    insertDict.Add("requiredactivity", requiredactivity);
                    updateList.Add("requiredactivity=@requiredactivity ");
                    query.SetParameter("@requiredactivity", requiredactivity);
                }

                if (communication >= 0)
                {
                    insertDict.Add("communication", communication);
                    updateList.Add("communication=@communication ");
                    query.SetParameter("@communication", communication);
                }

                if (services >= 0)
                {
                    insertDict.Add("services", services);
                    updateList.Add("services=@services");
                    query.SetParameter("@services", services);
                }

                updateList.Count.ThrowIfEqual(0, ErrorCodes.NothingDefined);

                string cmdStr;

                if (update)
                {
                    cmdStr = "update yellowpages set " + updateList.ArrayToString() + " where id=@id";
                    query.CommandText(cmdStr).SetParameter("@id", id);
                }
                else
                {
                    cmdStr = insertDict.ToInsertString("yellowpages", "nothing");
                    query.CommandText(cmdStr);
                }

                query.ExecuteNonQuery().ThrowIfNotEqual(1, ErrorCodes.SQLExecutionError);

                var entry  = _corporationManager.GetYellowPages(corporationeid);
                var result = new Dictionary <string, object> {
                    { k.data, entry }
                };
                Message.Builder.FromRequest(request).WithData(result).Send();
                CorporationData.RemoveFromCache(corporationeid);

                scope.Complete();
            }
        }
Esempio n. 9
0
        public void HandleRequest(IRequest request)
        {
            var rootEID = request.Data.GetOrDefault <long>(k.eid);

            var character = request.Session.Character;
            var owner     = character.Eid;

            var records = Enumerable.Select(Db.Query().CommandText("getitemsummary")
                                            .SetParameter("@ownerEID", owner)
                                            .SetParameter("@rootEID", rootEID)
                                            .Execute(), r =>
            {
                return(new
                {
                    definition = r.GetValue <int>(0),
                    parent = r.GetValue <long>(1),
                    qty = r.GetValue <long>(2)
                });
            }).ToList();

            var itemsDict = new Dictionary <string, object>();
            var count     = 0;
            var parents   = new List <long>(records.Count);

            foreach (var record in records)
            {
                var l = record.qty;
                if (l >= int.MaxValue)
                {
                    l = int.MaxValue;
                }

                var quantitySum = (int)l;

                if (!EntityDefault.TryGet(record.definition, out EntityDefault ed))
                {
                    continue;
                }

                if (!(ed.CategoryFlags.IsCategory(CategoryFlags.cf_robot_equipment) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_robots) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_ammo) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_material) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_documents) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_dogtags) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_production_items) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_mission_items) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_field_accessories) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_container) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_dynamic_cprg) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_scan_result) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_redeemables) ||
                      ed.CategoryFlags.IsCategory(CategoryFlags.cf_pbs_capsules)))
                {
                    continue;
                }

                var oneEntry = new Dictionary <string, object>
                {
                    { k.definition, record.definition },
                    { k.parent, record.parent },
                    { k.quantity, quantitySum }
                };

                parents.Add(record.parent);

                itemsDict.Add("c" + count++, oneEntry);
                Logger.DebugInfo($"{record.parent} {EntityDefault.Get(record.definition).Name} {quantitySum}");
            }

            var result = new Dictionary <string, object>
            {
                { k.items, itemsDict },
                { k.rootEID, rootEID }
            };

            if (parents.Count > 0)
            {
                var parentStr     = parents.ArrayToString();
                var counter       = 0;
                var parentsDict   = new Dictionary <string, object>();
                var secondParents = new List <long>();

                var dataRecords = Db.Query().CommandText($"select eid,ename,parent,definition from entities where eid in ({parentStr})").Execute();

                foreach (var r in dataRecords)
                {
                    var secondDefinition = r.GetValue <int>(3);
                    var secondParent     = r.GetValue <long?>(2);

                    EntityDefault ed;
                    if (!EntityDefault.TryGet(secondDefinition, out ed))
                    {
                        continue;
                    }

                    if (ed.CategoryFlags.IsCategory(CategoryFlags.cf_volume_wrapper_container))
                    {
                        continue;
                    }


                    if (secondParent != null && secondParent > 0)
                    {
                        secondParents.Add((long)secondParent);
                    }

                    var oneEntry =
                        new Dictionary <string, object>
                    {
                        { k.eid, r.GetValue <long>(0) },
                        { k.eName, r.GetValue <string>(1) },
                        { k.parent, secondParent },
                        { k.definition, secondDefinition }
                    };


                    parentsDict.Add("p" + counter++, oneEntry);
                }


                if (secondParents.Count > 0)
                {
                    var secondParentStr = secondParents.Except(parents).ArrayToString();


                    foreach (var r in Db.Query().CommandText("select eid,ename,parent,definition from entities where eid in (" + secondParentStr + ")").Execute())
                    {
                        var oneEntry =
                            new Dictionary <string, object>
                        {
                            { k.eid, r.GetValue <long>(0) },
                            { k.eName, r.GetValue <string>(1) },
                            { k.parent, r.GetValue <long>(2) },
                            { k.definition, r.GetValue <int>(3) }
                        };

                        parentsDict.Add("p" + counter++, oneEntry);
                    }
                }


                result.Add(k.data, parentsDict);


                foreach (var pair in parentsDict)
                {
                    var v = (Dictionary <string, object>)pair.Value;
                    Logger.DebugInfo($"{v[k.eid]} {v[k.parent]} {v[k.eName]} {EntityDefault.Get((int)v[k.definition]).Name}");
                }
            }

            Message.Builder.FromRequest(request).WithData(result).Send();
        }
        public void HandleRequest(IRequest request)
        {
            var primaryActivity   = request.Data.GetOrDefault(k.primaryActivity, -1);
            var primaryzone       = request.Data.GetOrDefault(k.zoneID, -1);
            var primaryBase       = request.Data.GetOrDefault(k.baseEID, (long)-1);
            var orientation       = request.Data.GetOrDefault(k.orientation, -1);
            var lookingFor        = request.Data.GetOrDefault(k.lookingFor, -1);
            var preferredFaction  = request.Data.GetOrDefault(k.preferredFaction, -1);
            var providesInsurance = request.Data.GetOrDefault(k.providesInsurance, -1);
            var timeZone          = request.Data.GetOrDefault(k.timeZone, -1);
            var requiredActivity  = request.Data.GetOrDefault(k.requiredActivity, -1);
            var communication     = request.Data.GetOrDefault(k.communication, -1);
            var services          = request.Data.GetOrDefault(k.services, -1);


            var clauseList = new List <string>();
            var query      = Db.Query();

            var searchString = "SELECT corporationeid FROM yellowpages WHERE ";

            if (primaryActivity > 0)
            {
                clauseList.Add("(primaryactivity & @primaryactivity) > 0 ");
                query.SetParameter("@primaryactivity", primaryActivity);
            }

            if (primaryzone >= 0)
            {
                clauseList.Add("zoneid = @primaryzone ");
                query.SetParameter("@primaryzone", primaryzone);
            }

            if (primaryBase > 0)
            {
                clauseList.Add("baseeid = @primarybase ");
                query.SetParameter("@primarybase", primaryBase);
            }

            if (orientation > 0)
            {
                clauseList.Add("(orientation & @orientation) > 0 ");
                query.SetParameter("@orientation", orientation);
            }

            if (lookingFor > 0)
            {
                clauseList.Add("(lookingfor & @lookingfor) > 0 ");
                query.SetParameter("@lookingfor", lookingFor);
            }

            if (preferredFaction > 0)
            {
                clauseList.Add("preferredfaction = @preferredfaction ");
                query.SetParameter("@preferredfaction", preferredFaction);
            }

            if (providesInsurance > 0)
            {
                clauseList.Add("(providesinsurance & @providesinsurance) > 0 ");
                query.SetParameter("@providesinsurance", providesInsurance);
            }

            if (timeZone > 0)
            {
                clauseList.Add("(timezone & @timezone) > 0 ");
                query.SetParameter("@timezone", timeZone);
            }

            if (requiredActivity > 0)
            {
                clauseList.Add("requiredactivity <= @requiredactivity ");
                query.SetParameter("@requiredactivity", requiredActivity);
            }

            if (communication > 0)
            {
                clauseList.Add("(communication & @communication) > 0 ");
                query.SetParameter("@communication", communication);
            }

            if (services > 0)
            {
                clauseList.Add("(services & @services) > 0");
                query.SetParameter("@services", services);
            }


            long[] corpEids;

            if (clauseList.Count == 0)
            {
                //all corps
                corpEids = query.CommandText("select corporationeid from yellowpages").Execute()
                           .Select(r => DataRecordExtensions.GetValue <long>(r, 0))
                           .ToArray();
            }
            else
            {
                searchString += clauseList.ArrayToString("AND ");

                query.CommandText(searchString);

                corpEids = query.Execute()
                           .Select(r => DataRecordExtensions.GetValue <long>(r, 0))
                           .ToArray();
            }

            if (corpEids.IsNullOrEmpty())
            {
                Message.Builder.FromRequest(request).WithEmpty().Send();
                return;
            }

            var result = new Dictionary <string, object>
            {
                { k.eid, corpEids }
            };

            Message.Builder.FromRequest(request).WithData(result).Send();
        }