Exemple #1
0
        public object SpellsTake(LookupKey lookupKey, [FromBody] SpellInfo spell)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (SpellBase.Get(spell.SpellId) == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid spell id."));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ));
            }

            if (player.TryForgetSpell(new Spell(spell.SpellId), true))
            {
                return(spell);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.InternalServerError, $@"Failed to remove player spell with id '{spell.SpellId}'."
                       ));
        }
        public object ItemsGive(LookupKey lookupKey, [FromBody] ItemInfo itemInfo)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (ItemBase.Get(itemInfo.ItemId) == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid item id."));
            }

            if (itemInfo.Quantity < 1)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, "Cannot give 0, or a negative amount of an item."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ));
            }

            if (!player.TryGiveItem(itemInfo.ItemId, itemInfo.Quantity, ItemHandling.Normal, itemInfo.BankOverflow, true))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.InternalServerError,
                           $@"Failed to give player {itemInfo.Quantity} of '{itemInfo.ItemId}'."
                           ));
            }

            using (var context = DbInterface.CreatePlayerContext(false))
            {
                context.Update(player);
                context.SaveChanges();
            }

            var quantityBank      = player.CountItems(itemInfo.ItemId, false, true);
            var quantityInventory = player.CountItems(itemInfo.ItemId, true, false);

            return(new
            {
                id = itemInfo.ItemId,
                quantity = new
                {
                    total = quantityBank + quantityInventory,
                    bank = quantityBank,
                    inventory = quantityInventory
                }
            });
        }
Exemple #3
0
        public object DoAdminActionOnPlayerByName(
            LookupKey lookupKey,
            string act,
            [FromBody] AdminActionParameters actionParameters
            )
        {
            if (!Enum.TryParse <AdminActions>(act, true, out var adminAction))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid action."));
            }

            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            Tuple <Client, Player> fetchResult;

            fetchResult = Player.Fetch(lookupKey);

            return(DoAdminActionOnPlayer(
                       () => fetchResult,
                       () => Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ), adminAction, actionParameters
                       ));
        }
        public object PlayerLevelSet(LookupKey lookupKey, [FromBody] LevelChange change)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player != null)
            {
                player.SetLevel(change.Level, true);
                if (player.Online)
                {
                    PacketSender.SendEntityDataToProximity(player);
                }

                using (var context = DbInterface.CreatePlayerContext(false))
                {
                    context.Update(player);
                    context.SaveChanges();
                }

                return(player);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'."
                       ));
        }
Exemple #5
0
        public object SetRank(Guid guildId, LookupKey lookupKey, [FromBody] GuildRank guildRank)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (guildRank.Rank <= 0 || guildRank.Rank >= Options.Instance.Guild.Ranks.Length)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, $@"Invalid guild rank, should be > 0 and < {Options.Instance.Guild.Ranks.Length}."
                           ));
            }


            var guild = Guild.LoadGuild(guildId);

            if (guild == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Guild does not exist."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);

            //Player not found
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Player not found."
                           ));
            }

            //Player is not a member of this guild
            if (!guild.IsMember(player.Id))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"{player.Name} is not a member of {guild.Name}."
                           ));
            }

            //Cannot kick the owner!
            if (player.GuildRank == 0)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Cannot change rank of the guild owner, transfer ownership first!"
                           ));
            }

            guild.SetPlayerRank(player, guildRank.Rank, null);

            return(player);
        }
Exemple #6
0
        public object PlayerVariableSet(LookupKey lookupKey, Guid variableId, [FromBody] VariableValue value)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (variableId == Guid.Empty || PlayerVariableBase.Get(variableId) == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Invalid variable id ${variableId}."));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ));
            }

            var variable = player.GetVariable(variableId, true);

            if (variable?.Value != null)
            {
                variable.Value.Value = value.Value;
            }

            return(variable);
        }
Exemple #7
0
 public object ItemsList(LookupKey lookupKey)
 {
     return(new
     {
         inventory = ItemsListInventory(lookupKey),
         bank = ItemsListBank(lookupKey)
     });
 }
Exemple #8
0
        public virtual string ToDisplayText()
        {
            var lookupKeyAsString = (LookupKey == null || LookupKey.ToString() == String.Empty)
                ? String.Empty
                : string.Format("{0} ", LookupKey);

            return(string.Format("{0}{1}", lookupKeyAsString, LookupName));
        }
        public object PlayerVariableSet(LookupKey lookupKey, Guid variableId, [FromBody] VariableValue value)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (variableId == Guid.Empty || PlayerVariableBase.Get(variableId) == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Invalid variable id ${variableId}."));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ));
            }

            var variable = player.GetVariable(variableId, true);

            var changed = true;

            if (variable?.Value != null)
            {
                if (variable?.Value?.Value != value.Value)
                {
                    changed = false;
                }
                variable.Value.Value = value.Value;
            }

            if (changed)
            {
                var plyr = Player.FindOnline(player.Id);
                if (plyr != null)
                {
                    player.StartCommonEventsWithTrigger(CommonEventTrigger.PlayerVariableChange, "", variableId.ToString());
                }
            }

            using (var context = DbInterface.CreatePlayerContext(false))
            {
                context.Update(player);
                context.SaveChanges();
            }

            return(variable);
        }
        public static Tuple <Client, Player> Fetch(LookupKey lookupKey)
        {
            if (!lookupKey.HasName && !lookupKey.HasId)
            {
                return(new Tuple <Client, Player>(null, null));
            }

            // HasName checks if null or empty
            // ReSharper disable once AssignNullToNotNullAttribute
            return(lookupKey.HasId ? Fetch(lookupKey.Id) : Fetch(lookupKey.Name));
        }
Exemple #11
0
        internal IEnumerable <T> TryGetCachedModel <T>(ISPListItemAdapter source, string fieldName, params int[] lookupIds)
        {
            List <T>      collection  = new List <T>();
            SPObjectCache cache       = this.Manager.ObjectCache;
            SPFieldLookup lookupField = cache.GetField(source.WebId, source.ListId, fieldName) as SPFieldLookup;

            if (lookupField != null)
            {
                if (hashtable == null)
                {
                    hashtable = new Hashtable();
                }
                Guid       listId           = lookupField.LookupList == "Self" ? source.ListId : new Guid(lookupField.LookupList);
                List <int> lookupIdsToQuery = new List <int>();

                foreach (int id in lookupIds)
                {
                    LookupKey key = new LookupKey(listId, id);
                    if (hashtable.ContainsKey(key))
                    {
                        object cachedItem = hashtable[key];
                        if (cachedItem is T)
                        {
                            collection.Add((T)cachedItem);
                        }
                    }
                    else
                    {
                        lookupIdsToQuery.Add(id);
                    }
                }
                if (lookupIdsToQuery.Count > 0)
                {
                    ISPModelManagerInternal manager = hashtable.EnsureKeyValue(typeof(T), () => (ISPModelManagerInternal)SPModel.GetDefaultManager(typeof(T), this.manager.Site.RootWeb, cache));
                    SPList  list  = cache.GetList(lookupField.LookupWebId, listId);
                    SPQuery query = new SPQuery {
                        Query = Caml.EqualsAny(SPBuiltInFieldName.ID, lookupIdsToQuery).ToString()
                    };

                    foreach (SPListItem item in list.GetItems(query))
                    {
                        object model = manager.TryCreateModel(new SPListItemAdapter(item, cache), false);
                        hashtable[new LookupKey(listId, item.ID)] = model;
                        if (model is T)
                        {
                            collection.Add((T)model);
                        }
                        cache.AddListItem(item);
                    }
                }
            }
            return(collection);
        }
Exemple #12
0
        public object Kick(Guid guildId, LookupKey lookupKey)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }


            var guild = Guild.LoadGuild(guildId);

            if (guild == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Guild does not exist."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);

            //Player not found
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Player not found."
                           ));
            }

            //Player is not a member of this guild
            if (!guild.IsMember(player.Id))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"{player.Name} is not a member of {guild.Name}."
                           ));
            }

            //Cannot kick the owner!
            if (player.GuildRank == 0)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Cannot kick a guild owner, transfer ownership first."
                           ));
            }

            guild.RemoveMember(player, null, Database.Logging.Entities.GuildHistory.GuildActivityType.Kicked);

            return(player);
        }
Exemple #13
0
        public object Transfer(Guid guildId, LookupKey lookupKey)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }


            var guild = Guild.LoadGuild(guildId);

            if (guild == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Guild does not exist."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);

            //Player not found
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Player not found."
                           ));
            }

            //Player is not a member of this guild
            if (!guild.IsMember(player.Id))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"{player.Name} is not a member of {guild.Name}."
                           ));
            }

            //Cannot kick the owner!
            if (player.GuildRank == 0)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Cannot transfer ownership of a guild to ones self."
                           ));
            }

            guild.TransferOwnership(player);

            return(player);
        }
        public object ChangeName(LookupKey lookupKey, [FromBody] NameChange change)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (!FieldChecking.IsValidUsername(change.Name, Strings.Regex.username))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Invalid name."
                           ));
            }

            if (Player.PlayerExists(change.Name))
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest,
                           $@"Name already taken."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player != null)
            {
                player.Name = change.Name;
                if (player.Online)
                {
                    PacketSender.SendEntityDataToProximity(player);
                }

                using (var context = DbInterface.CreatePlayerContext(false))
                {
                    context.Update(player);
                    context.SaveChanges();
                }

                return(player);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'."
                       ));
        }
Exemple #15
0
        public Lookup()
        {
            _table    = new TypologyTable();
            _typology = new LookupKey(this, "Typology");
            _n        = new LookupValue("N", "Nitrogen", "kg/ha");
            _p        = new LookupValue("P", "Phosphorus", "kg/ha");

            DataItems.Add(new DataItem(_table, "Table", typeof(TypologyTable),
                                       DataItemRole.Input, "TypologyTableTag"));
            DataItems.Add(new DataItem(_typology, "Typology", typeof(LookupKey),
                                       DataItemRole.Input, "TypologyTag"));
            DataItems.Add(new DataItem(_n, "N", typeof(LookupValue),
                                       DataItemRole.Output, "NTag"));
            DataItems.Add(new DataItem(_p, "P", typeof(LookupValue),
                                       DataItemRole.Output, "PTag"));
        }
        public object ItemsTake(LookupKey lookupKey, [FromBody] ItemInfo itemInfo)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (itemInfo.Quantity < 1)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, "Cannot take 0, or a negative amount of an item."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ));
            }

            if (player.TryTakeItem(itemInfo.ItemId, itemInfo.Quantity))
            {
                using (var context = DbInterface.CreatePlayerContext(false))
                {
                    context.Update(player);
                    context.SaveChanges();
                }

                return(new
                {
                    itemInfo.ItemId,
                    itemInfo.Quantity
                });
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.InternalServerError,
                       $@"Failed to take {itemInfo.Quantity} of '{itemInfo.ItemId}' from player."
                       ));
        }
Exemple #17
0
        public object LookupPlayer(LookupKey lookupKey)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player != null)
            {
                return(player);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'."
                       ));
        }
        public object SpellsTeach(LookupKey lookupKey, [FromBody] SpellInfo spell)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (SpellBase.Get(spell.SpellId) == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, @"Invalid spell id."));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player == null)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.NotFound,
                           lookupKey.HasId
                        ? $@"No player with id '{lookupKey.Id}'."
                        : $@"No player with name '{lookupKey.Name}'."
                           ));
            }

            if (player.TryTeachSpell(new Spell(spell.SpellId), true))
            {
                using (var context = DbInterface.CreatePlayerContext(false))
                {
                    context.Update(player);
                    context.SaveChanges();
                }

                return(spell);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.InternalServerError,
                       $@"Failed to teach player spell with id '{spell.SpellId}'. They might already know it!"
                       ));
        }
        public object DeletePlayer(LookupKey lookupKey)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player != null)
            {
                if (Player.FindOnline(player.Id) != null)
                {
                    return(Request.CreateErrorResponse(
                               HttpStatusCode.InternalServerError,
                               "Failed to delete player because they are online!"
                               ));
                }

                var user = Database.PlayerData.User.Find(player.UserId);
                if (user == null)
                {
                    return(Request.CreateErrorResponse(
                               HttpStatusCode.BadRequest,
                               $@"Failed to load user for {player.Name}!"
                               ));
                }

                user.DeleteCharacter(user.Players.FirstOrDefault(p => p.Id == player.Id));

                return(player);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'."
                       ));
        }
Exemple #20
0
        public object SendDirect(LookupKey lookupKey, [FromBody] ChatMessage chatMessage)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            var client = Globals.Clients.Find(
                lookupClient => string.Equals(
                    lookupKey.Name, lookupClient?.Entity?.Name, StringComparison.OrdinalIgnoreCase
                    )
                );

            if (client == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, $@"No player found for '{lookupKey}'."));
            }

            try
            {
                PacketSender.SendChatMsg(
                    client.Entity, chatMessage.Message, Enums.ChatMessageType.PM, chatMessage.Color ?? CustomColors.Chat.PlayerMsg,
                    chatMessage.Target
                    );

                return(new
                {
                    success = true,
                    lookupKey,
                    chatMessage
                });
            }
            catch (Exception exception)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exception.Message));
            }
        }
        public object PlayerClassSet(LookupKey lookupKey, [FromBody] ClassChange change)
        {
            if (lookupKey.IsInvalid)
            {
                return(Request.CreateErrorResponse(
                           HttpStatusCode.BadRequest, lookupKey.IsIdInvalid ? @"Invalid player id." : @"Invalid player name."
                           ));
            }

            if (change.ClassId == Guid.Empty || ClassBase.Get(change.ClassId) == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, $@"Invalid class id ${change.ClassId}."));
            }

            var(client, player) = Player.Fetch(lookupKey);
            if (player != null)
            {
                player.ClassId = change.ClassId;
                player.RecalculateStatsAndPoints();
                player.UnequipInvalidItems();
                if (player.Online)
                {
                    PacketSender.SendEntityDataToProximity(player);
                }

                using (var context = DbInterface.CreatePlayerContext(false))
                {
                    context.Update(player);
                    context.SaveChanges();
                }

                return(player);
            }

            return(Request.CreateErrorResponse(
                       HttpStatusCode.NotFound,
                       lookupKey.HasId ? $@"No player with id '{lookupKey.Id}'." : $@"No player with name '{lookupKey.Name}'."
                       ));
        }