Ejemplo n.º 1
0
 public void AddContent(ServerInventoryItem item)
 {
     if (!content.ContainsKey(item.Object.Id))
     {
         content.TryAdd(item.Object.Id, item);
     }
 }
Ejemplo n.º 2
0
 public bool AddItem(IInventoryObject obj, int count)
 {
     if (obj != null && count > 0)
     {
         ServerInventoryItem servItem = new ServerInventoryItem(obj, count);
         if (HasSpaceForItems(servItem))
         {
             if (items.ContainsKey(servItem.Object.Id))
             {
                 ServerInventoryItem existingItem = null;
                 if (items.TryGetValue(servItem.Object.Id, out existingItem))
                 {
                     existingItem.Add(count);
                     return(true);
                 }
             }
             else
             {
                 items.TryAdd(servItem.Object.Id, servItem);
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 3
0
        private ServerInventoryItem GiveOreReward(MmoActor player, ContractOreDataReward oreReward)
        {
            int     playerLevel = player.GetComponent <CharacterObject>().level;
            OreData data        = null;

            foreach (var ore in player.resource.Materials.Ores)
            {
                if (ore.Id.Contains(playerLevel.ToString()))
                {
                    data = ore;
                    break;
                }
            }

            if (data != null)
            {
                MaterialObject materialObj = new MaterialObject(data.Id);
                int            count       = Rand.Int(oreReward.minCount, oreReward.maxCount);
                if (count > 0)
                {
                    ServerInventoryItem item = new ServerInventoryItem(materialObj, count);
                    return(item);
                }
            }
            return(null);
        }
Ejemplo n.º 4
0
 public void AddToStationInventory(ServerInventoryItem item, bool sendUpdateEvent = true)
 {
     Station.StationInventory.Add(item.Object, item.Count);
     if (sendUpdateEvent)
     {
         EventOnStationHoldUpdated();
     }
 }
Ejemplo n.º 5
0
 public bool TryGetObject(string playerID, string inventoryObjectID, out ServerInventoryItem obj) {
     CheckAndFillPlayer(playerID);
     obj = null;
     ConcurrentDictionary<string, ServerInventoryItem> filteredObjects = null;
     if(m_Content.TryGetValue(playerID, out filteredObjects)) {
         if(filteredObjects.TryGetValue(inventoryObjectID, out obj)) {
             return true;
         }
     }
     return false;
 }
Ejemplo n.º 6
0
 public int SlotsForItem(ServerInventoryItem it)
 {
     if (items.ContainsKey(it.Object.Id))
     {
         return(0);
     }
     else
     {
         return(1);
     }
 }
Ejemplo n.º 7
0
 public bool TryRemoveActorObjectids(string playerID, List<string> inventoryObjectIDs) {
     CheckAndFillPlayer(playerID);
     ConcurrentDictionary<string, ServerInventoryItem> filtered = null;
     bool result = true;
     if(m_Content.TryGetValue(playerID, out filtered)) {
         foreach(var id in inventoryObjectIDs ) {
             ServerInventoryItem removed = null;
             result = result && filtered.TryRemove(id, out removed);
         }
     }
     return result;
 }
Ejemplo n.º 8
0
        public RPCErrorCode Check(MmoActor player, ServerInventoryItem item)
        {
            switch (item.Object.Id)
            {
            case "analyzer001":
                //return CheckAnaluzer001(player);
                return(RPCErrorCode.Ok);

            default:
                return(RPCErrorCode.InvalidObjectType);
            }
        }
Ejemplo n.º 9
0
        public bool TryGetObject(string actorId, string objectId, out ServerInventoryItem resultObject)
        {
            resultObject = null;
            ConcurrentDictionary <string, ServerInventoryItem> filteredObjects = null;

            if (content.TryGetValue(actorId, out filteredObjects))
            {
                if (filteredObjects.TryGetValue(objectId, out resultObject))
                {
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 10
0
        public void OnWasKilled()
        {
            s_Log.InfoFormat("MiningStation.OnWasKilled() call with = {0} damagers".Color(LogColor.orange), m_damagers.Count);
            if (currentCount > 0 && m_damagers.Count > 0)
            {
                NebulaElementObject        nebObject           = new NebulaElementObject(nebulaElementID, nebulaElementID);
                ServerInventoryItem        serverInventoryItem = new ServerInventoryItem(nebObject, currentCount);
                List <ServerInventoryItem> itemsPerDamager     = new List <ServerInventoryItem> {
                    serverInventoryItem
                };

                var chest = ObjectCreate.Chest(nebulaObject.world as MmoWorld, transform.position, 4 * 60,
                                               m_damagers, itemsPerDamager);
                chest.AddToWorld();
            }
        }
Ejemplo n.º 11
0
 private ServerInventoryItem GenerateItemOnDictionary(DropItem dropItem) {
     if(dropItem != null ) {
         switch(dropItem.itemType ) {
             case InventoryObjectType.quest_item: {
                     QuestObjectDropItem questDropItem = dropItem as QuestObjectDropItem;
                     if (questDropItem != null) {
                         QuestItemObject questItemObject = new QuestItemObject(dropItem.itemId, questDropItem.quest);
                         ServerInventoryItem serverInventoryItem = new ServerInventoryItem(questItemObject, questDropItem.count);
                         return serverInventoryItem;
                     }
                 }
                 break;
             default:
                 return null;
         }
     }
     return null;
 }
Ejemplo n.º 12
0
        public bool TryRemoveActorObjectids(string actorId, List <string> ids)
        {
            ConcurrentDictionary <string, ServerInventoryItem> filtered = null;
            bool result = true;

            if (content.TryGetValue(actorId, out filtered))
            {
                foreach (var id in ids)
                {
                    ServerInventoryItem removed = null;
                    result = result && filtered.TryRemove(id, out removed);
                }

                if (filtered.Count == 0)
                {
                    ConcurrentDictionary <string, ServerInventoryItem> removedList = null;
                    content.TryRemove(actorId, out removedList);
                }
            }
            return(result);
        }
Ejemplo n.º 13
0
        public void EventOnInventoryItemAdded(string containerId, byte containerType, List <IInventoryObject> addedObjects)
        {
            //GetInventory().TryGetItem()

            List <Hashtable> items = new List <Hashtable>();

            foreach (var addedObj in addedObjects)
            {
                ServerInventoryItem resultItem = null;
                if (this.Inventory.TryGetItem(addedObj.Type, addedObj.Id, out resultItem))
                {
                    items.Add(resultItem.GetInfo());
                }
            }
            Hashtable eventData = new Hashtable();

            eventData.Add((int)SPC.Target, containerId);
            eventData.Add((int)SPC.TargetType, containerType);
            eventData.Add((int)SPC.Items, items.ToArray());

            var eventInstance = new ItemGeneric {
                ItemId          = Avatar.Id,
                ItemType        = Avatar.Type,
                CustomEventCode = (byte)CustomEventCode.InventoryItemsAdded,
                EventData       = eventData,
                GameReferenceId = nebulaObject.Id,
                CharacterId     = mCharacter.characterId
            };

            var            eData          = new EventData((byte)EventCode.ItemGeneric, eventInstance);
            SendParameters sendParameters = new SendParameters {
                Unreliable = true, ChannelId = Settings.ItemEventChannel
            };

            ((IMmoItem)Avatar).ReceiveEvent(eData, sendParameters);
        }
Ejemplo n.º 14
0
        public Hashtable TransformPetSchemeToPet(string schemeId)
        {
            var inventory      = player.Station.StationInventory;
            var petManager     = player.GetComponent <PetManager>();
            var playerRaceable = player.GetComponent <RaceableObject>();

            if (false == inventory.HasItem(InventoryObjectType.pet_scheme, schemeId))
            {
                return(CreateResponse(RPCErrorCode.ItemNotFound));
            }
            ServerInventoryItem schemeItem = null;

            if (false == inventory.TryGetItem(InventoryObjectType.pet_scheme, schemeId, out schemeItem))
            {
                return(CreateResponse(RPCErrorCode.ErrorOfGettingInventoryItem));
            }

            PetSchemeObject petSchemeObject = schemeItem.Object as PetSchemeObject;

            if (false == petManager.hasFreeSpace)
            {
                return(CreateResponse(RPCErrorCode.LowPetAngarSpace));
            }

            string model = player.resource.petParameters.defaultModels[(Race)playerRaceable.race];

            if (string.IsNullOrEmpty(model))
            {
                return(CreateResponse(RPCErrorCode.ResourceDataError));
            }

            PetDropper.PetDropSettings settings = new PetDropper.PetDropSettings();

            settings.OffGenerateColor();
            settings.SetColor(petSchemeObject.petColor);

            settings.OffGenerateModel();
            settings.SetModel(model);

            settings.OnGeneratePassiveSkill();
            settings.OnGenerateActiveSkills();
            settings.OnGenerateDamageType();

            settings.OnSetMastery();
            settings.SetMastery(0);

            settings.OffGenerateRace();
            settings.SetRace((Race)playerRaceable.race);

            PetDropper dropper = new PetDropper();
            PetInfo    petInfo = dropper.Drop(player.resource.petParameters, settings, player.resource.petSkills, player.resource.petPassiveBonuses);

            inventory.Remove(InventoryObjectType.pet_scheme, schemeId, 1);

            if (false == petManager.AddPet(petInfo))
            {
                return(CreateResponse(RPCErrorCode.ErrorOfAddingPetToCollection));
            }

            var allowedCount = player.resource.petParameters.GetPlayerPetCount(player.GetComponent <PlayerCharacterObject>().level);

            if (petManager.countOfActivePets < allowedCount)
            {
                bool success = petManager.ActivatePet(petInfo.id);
                if (success)
                {
                    player.GetComponent <MmoMessageComponent>().ReceivePetsUpdate();
                }
            }
            player.EventOnStationHoldUpdated();

            Hashtable hash = CreateResponse(RPCErrorCode.Ok);

            hash.Add((int)SPC.Pet, petInfo.GetInfo(player.resource));

            var achievments = player.GetComponent <AchievmentComponent>();

            achievments.SetVariable("max_pet_color", (int)petInfo.color);

            return(hash);
        }
Ejemplo n.º 15
0
        private void RewardItemImpl(InventoryItemQuestReward reward)
        {
            ServerInventoryItem targetItem = null;

            switch (reward.ObjectType)
            {
            case InventoryObjectType.Material: {
                MaterialItemQuestReward materialReward = reward as MaterialItemQuestReward;
                if (materialReward != null)
                {
                    MaterialObject material = new MaterialObject(materialReward.OreId);
                    targetItem = new ServerInventoryItem(material, materialReward.Count);
                }
            }
            break;

            case InventoryObjectType.Scheme: {
                SchemeItemQuestReward schemeReward = reward as SchemeItemQuestReward;
                if (schemeReward != null)
                {
                    SchemeObject scheme = new SchemeObject(new SchemeObject.SchemeInitData(
                                                               id: Guid.NewGuid().ToString(),
                                                               name: string.Empty,
                                                               level: PlayerLevel,
                                                               workshop: PlayerWorkshop,
                                                               templateModuleId: resource.ModuleTemplates.Module(PlayerWorkshop, schemeReward.Slot).Id,
                                                               color: schemeReward.Color,
                                                               craftingMaterials: new Dictionary <string, int>(),
                                                               inSetID: string.Empty
                                                               ));
                    targetItem = new ServerInventoryItem(scheme, schemeReward.Count);
                }
            }
            break;

            case InventoryObjectType.Weapon: {
                WeaponItemQuestReward weaponReward = reward as WeaponItemQuestReward;
                if (weaponReward != null)
                {
                    WeaponDropper.WeaponDropParams weaponDropParams = new WeaponDropper.WeaponDropParams(
                        resource: resource,
                        level: PlayerLevel,
                        workshop: PlayerWorkshop,
                        damageType: WeaponDamageType.damage,
                        difficulty: Difficulty.none
                        );
                    ColorInfo     colorInfo     = resource.ColorRes.Color(ColoredObjectType.Weapon, weaponReward.Color);
                    DropManager   dropManager   = DropManager.Get(resource);
                    WeaponDropper weaponDropper = dropManager.GetWeaponDropper(dropParams: weaponDropParams);
                    WeaponObject  weapon        = weaponDropper.DropWeapon(colorInfo);
                    targetItem = new ServerInventoryItem(weapon, weaponReward.Count);
                }
            }
            break;
            }

            if (targetItem != null)
            {
                GetComponent <MmoActor>()?.AddToStationInventory(item: targetItem, sendUpdateEvent: true);
            }
        }
Ejemplo n.º 16
0
 public bool TryGetObject(string playerID, string inventoryObjectID, out ServerInventoryItem item)
 {
     return(content.TryGetValue(inventoryObjectID, out item));
 }
Ejemplo n.º 17
0
        public Hashtable EquipModule(string moduleId, WorkhouseStation station)
        {
            var character = GetComponent <CharacterObject>();
            var player    = GetComponent <MmoActor>();


            ServerInventoryItem obj = null;

            if (!station.StationInventory.TryGetItem(InventoryObjectType.Module, moduleId, out obj))
            {
                return(new Hashtable {
                    { (int)SPC.ReturnCode, (int)RPCErrorCode.ObjectNotFound }
                });
            }

            if (!(obj.Object is ShipModule))
            {
                return(new Hashtable {
                    { (int)SPC.ReturnCode, (int)RPCErrorCode.InvalidObjectType }
                });
            }

            ShipModule module = obj.Object as ShipModule;

            if (module.Workshop != (Workshop)character.workshop)
            {
                return(new Hashtable {
                    { (int)SPC.ReturnCode, (int)RPCErrorCode.InvalidObjectWorkshop },
                    { (int)SPC.Data, (byte)module.Workshop }
                });
            }

            ShipModel model              = shipModel;
            int       willBeHoldCount    = model.HoldCountWhenInstalledThatModule(module);
            int       usedInventoryCount = player.Inventory.SlotsUsed;

            if (willBeHoldCount < usedInventoryCount)
            {
                return(new Hashtable {
                    { (int)SPC.ReturnCode, (int)RPCErrorCode.LowInventorySpace },
                    { (int)SPC.Data, (usedInventoryCount - willBeHoldCount) }
                });
            }

            station.StationInventory.Remove(InventoryObjectType.Module, moduleId, 1);

            ShipModule prevModule = null;

            this.SetModule(module, out prevModule);
            player.Inventory.ChangeMaxSlots(holdCapacity);

            if (prevModule == null)
            {
                return(new Hashtable
                {
                    { (int)SPC.ReturnCode, (int)RPCErrorCode.Ok }
                });
            }

            if (!station.StationInventory.Add(prevModule, 1))
            {
                return(new Hashtable {
                    { (int)SPC.ReturnCode, (int)RPCErrorCode.FailAddToStation }
                });
            }

            if (player != null)
            {
                player.EventOnStationHoldUpdated();
                player.EventOnInventoryUpdated();
                player.GetComponent <MmoMessageComponent>().ReceiveUpdateCombatStats();
            }

            return(new Hashtable
            {
                { (int)SPC.ReturnCode, (int)RPCErrorCode.Ok }
            });
        }