Beispiel #1
0
        private void Input()
        {
            if (KeyboardInput.IsKeyClicked(Keys.P))
                _worldObject = new WoodBed(new Vector3Int(0, 0, 0), 1);
            if (KeyboardInput.IsKeyClicked(Keys.O))
                _worldObject = new WoodDoor(new Vector3Int(0, 0, 0));
            if (KeyboardInput.IsKeyClicked(Keys.I))
                _worldObject = new WoodTable(new Vector3Int(0, 0, 0));
            if (KeyboardInput.IsKeyClicked(Keys.U))
                _worldObject = new WoodChair(new Vector3Int(0, 0, 0));
            if (KeyboardInput.IsKeyClicked(Keys.Y))
                _worldObject = new SteamEngine(new Vector3Int(0, 0, 0));
            if (KeyboardInput.IsKeyClicked(Keys.T))
                _worldObject = new Gear(new Vector3Int(0, 0, 0));
            if (KeyboardInput.IsKeyClicked(Keys.R))
                _worldObject = new Rod(new Vector3Int(0, 0, 0));
            if (KeyboardInput.IsKeyClicked(Keys.E))
                _worldObject = new Rail(new Vector3Int(0, 0, 0), 1);

            if (KeyboardInput.IsKeyClicked(Keys.NumPad1))
                _worldObject.SetLevel(1);
            if (KeyboardInput.IsKeyClicked(Keys.NumPad2))
                _worldObject.SetLevel(2);
            if (KeyboardInput.IsKeyClicked(Keys.NumPad3))
                _worldObject.SetLevel(3);

            if (MouseInput.IsLeftMouseClicked() && _worldObject != null)
            {
                Place();
            }
            if (MouseInput.IsRightMouseClicked())
            {
                Cancel();
            }
        }
Beispiel #2
0
 public static void Update(UpdateValuesDto dto, WorldObject obj)
 {
     switch(obj.TypeId) {
     case ObjectTypeId.Item:
         UpdateItem(dto, (Item)obj);
         break;
     case ObjectTypeId.Container:
         UpdateContainer(dto, (Container)obj);
         break;
     case ObjectTypeId.Unit:
         UpdateUnit(dto, (Unit)obj);
         break;
     case ObjectTypeId.Player:
         UpdatePlayer(dto, (Player)obj);
         break;
     case ObjectTypeId.GameObject:
         UpdateGameObject(dto, (GameObject)obj);
         break;
     case ObjectTypeId.DynamicObject:
         UpdateDynamicObject(dto, (DynamicObject)obj);
         break;
     case ObjectTypeId.Corpse:
         UpdateCorpse(dto, (Corpse)obj);
         break;
     case ObjectTypeId.Object:
     case ObjectTypeId.AIGroup:
     case ObjectTypeId.AreaTrigger:
         UpdateObject(dto, obj);
         break;
     default:
         throw new ArgumentOutOfRangeException();
     }
 }
Beispiel #3
0
 public virtual void addMovement(WorldObject worldObject)
 {
     ////Debug.Log("addMovementWO");
     additionalTargetRange = ResourceManager.GetRadius(worldObject.WObjectName);
     target = worldObject;
     addMovement(worldObject._transform.position);
 }
 public MoveCraftedResourceToDepotTask(Building craftBuilding, WorldObject obj)
 {
     DwarfConsole.WriteLine("Move crafted", ConsoleColor.Red);
     CraftBuilding = craftBuilding;
     Obj = obj;
     TaskType = Tasks.TaskType.MoveCraftedResource;
 }
Beispiel #5
0
        public Boolean CanFit(WorldObject wObj, Vector2f position)
        {
            foreach (BBoundingBox BB in wObj.BBoundingBoxes)
            {
                IntRect rect = BB.GetNextTRect(position);

                for (int y = rect.Top; y < rect.Bottom + 1; ++y)
                {
                    for (int x = rect.Left; x < rect.Right + 1; ++x)
                    {
                        if (GetBlock(x, y))
                        {
                            return false;
                        }

                        IEnumerator<BBoundingBox> mapBBsEnum = GetBBoundingBoxesEnumerator(x, y, 0);
                        while (mapBBsEnum.MoveNext())
                        {
                            if (BB.Holder == mapBBsEnum.Current.Holder)
                                continue;

                            if (!BB.BoundingBoxTest(mapBBsEnum.Current, position))
                                continue;

                            return false;
                        }
                    }
                }
            }

            return true;
        }
 public CollectFoodFromPastureTask(PastureSim pasture, WorldObject foodItem)
 {
     pasture.Building.TasksAssociatedWithBuilding.Add(this);
     Pasture = pasture;
     FoodItem = foodItem;
     TaskType = TaskType.CollectFoodFromPasture;
 }
        private bool DoesBuildingHaveNecessaryMaterialsForCrafting(Building b, WorldObject obj)
        {
            bool does = true;
            bool haveRequested = TaskManager.IsAlreadyGettingNecessaryBuildingMaterials(b, obj);

            int counter = 0;

            if (obj.ElementType == MapElementType.Meal)
            {
                foreach (KeyValuePair<MapElementType, List<WorldObject>> keyValue in b.DepositedWorldObjects)
                {
                    foreach (WorldObject depobj in keyValue.Value)
                    {
                        if (depobj.GetType().IsSubclassOf(typeof(Food)))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }
            else
            {
                foreach (KeyValuePair<MapElementType, int> materials in obj.NeededForCrafting)
                {
                    if (b.DepositedWorldObjects.ContainsKey(materials.Key) == false)
                    {
                        for (int i = 0; i < materials.Value; i++)
                        {
                            if (haveRequested == false)
                            {
                                TaskManager.AddTask(new GetBuildingMaterialTask(materials.Key, obj.Level, b));
                                counter++;
                            }
                            does = false;
                        }
                    }
                    else
                    {
                        for (int i = 0; i < materials.Value - b.GetNumberOfDepositedMaterial(materials.Key, obj.Level); i++)
                        {
                            if (haveRequested == false)
                            {
                                TaskManager.AddTask(new GetBuildingMaterialTask(materials.Key, obj.Level, b));
                                counter++;
                            }
                            does = false;
                        }
                    }
                }
            }

            if (counter == 1)
            {

            }

            return does;
        }
        public static void ResolveCollision(WorldObject objectTriggering, WorldObject objectHit)
        {
            if (objectTriggering is PlayerShip)
            {
                if (objectHit is Asteroid)
                {
                    objectTriggering.DestroySelf();
                    objectHit.DefaultDestructAction(); ;
                }
                if (objectHit is Ring)
                {
                    objectHit.DestroySelf();
                }
            }

            if (objectTriggering is Laser)
            {
                if (objectHit is Asteroid) { objectHit.DestroySelf(); objectTriggering.DestroySelf(); }
            }

            if (objectTriggering is Bomb)
            {
                if (objectHit is Asteroid) { objectHit.DestroySelf(); }
            }
        }
Beispiel #9
0
 public void AddObject(WorldObject obj, string prefab)
 {
     if (!_entities.ContainsKey(obj.InstanceId))
     {
         _entities.Add(obj.InstanceId, obj);
     }
 }
		public static MyWorldObject Create(WorldObject wo)
		{
			MyWorldObject mwo = new MyWorldObject();

			Dictionary<int, bool> boolValues = new Dictionary<int,bool>();
			Dictionary<int, double> doubleValues = new Dictionary<int,double>();
			Dictionary<int, int> intValues = new Dictionary<int, int>();
			Dictionary<int, string> stringValues = new Dictionary<int,string>();
			List<int> activeSpells = new List<int>();
			List<int> spells = new List<int>();

			foreach (var key in wo.BoolKeys)
				boolValues.Add(key, wo.Values((BoolValueKey)key));

			foreach (var key in wo.DoubleKeys)
				doubleValues.Add(key, wo.Values((DoubleValueKey)key));

			foreach (var key in wo.LongKeys)
				intValues.Add(key, wo.Values((LongValueKey)key));

			foreach (var key in wo.StringKeys)
				stringValues.Add(key, wo.Values((StringValueKey)key));

			for (int i = 0 ; i < wo.ActiveSpellCount ; i++)
				activeSpells.Add(wo.ActiveSpell(i));

			for (int i = 0; i < wo.SpellCount; i++)
				spells.Add(wo.Spell(i));

			mwo.Init(wo.HasIdData, wo.Id, wo.LastIdTime, (int)wo.ObjectClass, boolValues, doubleValues, intValues, stringValues, activeSpells, spells);

			return mwo;
		}
        public void AddObject(WorldObject obj)
        {
            this.allObjects.Add(obj);

            IControllable objAsControllable = obj as IControllable;
            if (objAsControllable != null)
            {
                this.controllables.Add(objAsControllable);
            }

            IResource objAsResource = obj as IResource;
            if (objAsResource != null)
            {
                this.resources.Add(objAsResource);
            }

            //IGatherer objAsGatherer = obj as IGatherer;
            //if (objAsGatherer != null)
            //{
            //    this.gatherers.Add(objAsGatherer);
            //}

            //IFighter objAsFighter = obj as IFighter;
            //if (objAsFighter != null)
            //{
            //    this.fighters.Add(objAsFighter);
            //}
        }
Beispiel #12
0
 public void LoadContent()
 {
     mPlayerTexture = Game.Content.Load<Texture2D>("blue");
     mPlayerBulletTexture = Game.Content.Load<Texture2D>("spark");
     mPlayer = new WorldObject(mPlayerTexture);
     //mPlayer.Position = new Vector2(0, 0);
     mWorld.SetPlayerComponent(mPlayer);
 }
Beispiel #13
0
        public EBoundingBox(WorldObject holder, EBoundingBoxType type, int left, int top, int right, int bottom, int z = DEFAULT_BASE_Z)
            : base(holder, left, top, right, bottom, z)
        {
            Type = type;

            Events = new List<ObjectEvent>();
            EventsToRemove = new Queue<ObjectEvent>();
        }
Beispiel #14
0
        public static void SaveWorldObject(JsonWriter writer, WorldObject worldObject)
        {
            if (writer == null || worldObject == null) return;

            writer.WriteStartObject();
            worldObject.SaveDetails(writer);
            writer.WriteEndObject();
        }
Beispiel #15
0
		public ItemInfoIdentArgs(WorldObject identifiedItem, bool dontShowIfItemHasNoRule = false, bool dontShowIfIsSalvageRule = false)
		{
			IdentifiedItem = identifiedItem;

			DontShowIfItemHasNoRule = dontShowIfItemHasNoRule;

			DontShowIfIsSalvageRule = dontShowIfIsSalvageRule;
		}
Beispiel #16
0
        public EBoundingBox(EBoundingBox copy, WorldObject holder)
            : base(copy, holder)
        {
            Type = copy.Type;

            Events = new List<ObjectEvent>(copy.Events);
            EventsToRemove = new Queue<ObjectEvent>();
        }
Beispiel #17
0
 public AttackCommand(Unit unit, WorldObject target)
 {
     this.target = target;
     this.unit = unit;
     targetRotation = Quaternion.LookRotation (target.transform.position - unit.transform.position);
     targetOneCommand = new TargetOneCommand (unit, target);
     unit.IssueSubCommand (targetOneCommand);
 }
Beispiel #18
0
 /*** Private worker methods ***/
 private void ChangeSelection(WorldObject worldObject, Player controller)
 {
     //this should be called by the following line, but there is an outside chance it will not
     SetSelection(false);
     if(controller.SelectedObject) controller.SelectedObject.SetSelection(false);
     controller.SelectedObject = worldObject;
     worldObject.SetSelection(true);
 }
Beispiel #19
0
        public override void DepositWorldObject(WorldObject worldObject)
        {
            if (worldObject.ElementType == MapElementType.Beer)
            {

            }
            //PrintDepositedWorldObjects();
            base.DepositWorldObject(worldObject);
        }
Beispiel #20
0
        /// <summary>
        /// Add this CollisionObject to bucket.
        /// </summary>
        internal override void AddToBucket(WorldObject worldObject)
        {
            int bottomLeftX = (int)(worldObject.Pos.X + TL.X) / (int)Collision.CellWidth;
            int bottomLeftY = (int)(worldObject.Pos.Y + BR.Y) / (int)Collision.CellHeight;
            int topRightX = (int)(worldObject.Pos.X + BR.X) / (int)Collision.CellWidth;
            int topRightY = (int)(worldObject.Pos.Y + TL.Y) / (int)Collision.CellHeight;

            AddToBucket(worldObject, bottomLeftX, bottomLeftY, topRightX, topRightY);
        }
        /// <summary>
        /// Add this CollisionObject to bucket.
        /// </summary>
        internal override void addToBucket(WorldObject worldObject)
        {
            int bottomLeftX = (int)(worldObject.Pos.X + topLeftPointOffset.X) / (int)Collision.gridCellWidth;
            int bottomLeftY = (int)(worldObject.Pos.Y + bottomRightPointOffset.Y) / (int)Collision.gridCellHeight;
            int topRightX = (int)(worldObject.Pos.X + bottomRightPointOffset.X) / (int)Collision.gridCellWidth;
            int topRightY = (int)(worldObject.Pos.Y + topLeftPointOffset.Y) / (int)Collision.gridCellHeight;

            AddToBucket(worldObject, bottomLeftX, bottomLeftY, topRightX, topRightY);
        }
Beispiel #22
0
 public override void SetBuilding(Building project, WorldObject worldObject)
 {
     base.SetBuilding (project, worldObject);
     currentProject = project;
     target = worldObject;
     addMovement(worldObject);
     amountBuilt = 0.0f;
     building = true;
 }
        /// <summary>
        /// Add this CollisionObject to bucket.
        /// </summary>
        internal override void AddToBucket(WorldObject worldObject)
        {
            int bottomLeftX = (int)(worldObject.Pos.X + Center.X - Radius) / (int)Collision.CellWidth;
            int bottomLeftY = (int)(worldObject.Pos.Y + Center.Y - Radius) / (int)Collision.CellHeight;
            int topRightX = (int)(worldObject.Pos.X + Center.X + Radius) / (int)Collision.CellWidth;
            int topRightY = (int)(worldObject.Pos.Y + Center.Y + Radius) / (int)Collision.CellHeight;

            AddToBucket(worldObject, bottomLeftX, bottomLeftY, topRightX, topRightY);
        }
        /// <summary>
        /// Add this CollisionObject to bucket.
        /// </summary>
        internal override void addToBucket(WorldObject worldObject)
        {
            int bottomLeftX = (int)(worldObject.Pos.X + centerPointOffset.X - radius) / (int)Collision.gridCellWidth;
            int bottomLeftY = (int)(worldObject.Pos.Y + centerPointOffset.Y - radius) / (int)Collision.gridCellHeight;
            int topRightX = (int)(worldObject.Pos.X + centerPointOffset.X + radius) / (int)Collision.gridCellWidth;
            int topRightY = (int)(worldObject.Pos.Y + centerPointOffset.Y + radius) / (int)Collision.gridCellHeight;

            AddToBucket(worldObject, bottomLeftX, bottomLeftY, topRightX, topRightY);
        }
        public WorldObjectMover(EditorScreen parentScreen, SpriteBatch spriteBatch, WorldObject worldObject)
            : base(parentScreen, spriteBatch, 
            new RectangleF(worldObject.ScreenPosition.X, worldObject.ScreenPosition.Y, MIN_BOUNDS.Width, MIN_BOUNDS.Height))
        {
            this.worldObject = worldObject;
            base.Draggable[0] = true; // Draggable with the left mouse button!

            removable = !(worldObject is Player);
        }
        internal override void draw(WorldObject world, Matrix transformation)
        {
            Collision.basicEffect.World = Matrix.CreateTranslation(new Vector3(world.Pos,0)) * transformation;

            foreach (EffectPass pass in Collision.basicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                This.Game.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineStrip, drawPoints, 0, drawPoints.Length-1);
            }
        }
Beispiel #27
0
		/// <summary>
		/// This function will return the distance in meters.
		/// The manual distance units are in map compass units, while the distance units used in the UI are meters.
		/// In AC there are 240 meters in a kilometer; thus if you set your attack range to 1 in the UI it
		/// will showas 0.00416666666666667in the manual options (0.00416666666666667 being 1/240). 
		/// </summary>
		/// <param name="obj1"></param>
		/// <param name="obj2"></param>
		/// <returns></returns>
		/// <exception cref="ArgumentOutOfRangeException">Object passed with an Id of 0</exception>
		public static double GetDistance(WorldObject obj1, WorldObject obj2)
		{
			if (obj1.Id == 0)
				throw new ArgumentOutOfRangeException("obj1", "Object passed with an Id of 0");

			if (obj2.Id == 0)
				throw new ArgumentOutOfRangeException("obj2", "Object passed with an Id of 0");

			return CoreManager.Current.WorldFilter.Distance(obj1.Id, obj2.Id) * 240;
		}
Beispiel #28
0
		/// <summary>
		/// This function will return the distance in meters.
		/// The manual distance units are in map compass units, while the distance units used in the UI are meters.
		/// In AC there are 240 meters in a kilometer; thus if you set your attack range to 1 in the UI it
		/// will showas 0.00416666666666667in the manual options (0.00416666666666667 being 1/240). 
		/// </summary>
		/// <param name="destObj"></param>
		/// <returns></returns>
		/// <exception cref="ArgumentOutOfRangeException">CharacterFilder.Id or Object passed with an Id of 0</exception>
		public static double GetDistanceFromPlayer(WorldObject destObj)
		{
			if (CoreManager.Current.CharacterFilter.Id == 0)
				throw new ArgumentOutOfRangeException("destObj", "CharacterFilter.Id of 0");

			if (destObj.Id == 0)
				throw new ArgumentOutOfRangeException("destObj", "Object passed with an Id of 0");

			return CoreManager.Current.WorldFilter.Distance(CoreManager.Current.CharacterFilter.Id, destObj.Id) * 240;
		}
Beispiel #29
0
 public override void DepositWorldObject(WorldObject worldObject)
 {
     if (worldObject.ElementType == MapElementType.Coal)
     {
         _burnTime += _oneCoalBurnTime;
         _requestedCoal--;
     }
     else
         base.DepositWorldObject(worldObject);
 }
Beispiel #30
0
	// Update is called once per frame
	void Update () {
		UpdateRaycast();
		
		mousetarget = info.collider.GetComponent<WorldObject>();
		
		Vector3 focus = man.transform.position;
		currentCamera.transform.position = new Vector3(focus.x, 
														currentCamera.transform.position.y, 
														focus.z - 15f);
	}
Beispiel #31
0
 protected override void Apply(WorldObject target)
 {
     // TODO: DismissPetEffectHandler
 }
 protected override void Apply(WorldObject target, ref DamageAction[] actions)
 {
     ((Unit)target).HealPercent(this.CalcDamageValue(), this.m_cast.CasterUnit, this.Effect);
 }
 public override void OnReceiveRemote() => WorldObject.SpecialImpact();
 protected override void Apply(WorldObject target, ref DamageAction[] actions)
 {
 }
Beispiel #35
0
 // Add a world object
 public void AddWorldObjectToScene(WorldObject worldObj)
 {
     worldObj.objectID = ++totalObjects;
     allWorldObjects.Add(worldObj);
     ViewWorldObjectsWindow.instance.UpdateWorldObjectsList();
 }
Beispiel #36
0
 private void Awake()
 {
     worldObject  = GetComponent <WorldObject>();
     unit         = GetComponent <Unit>();
     paramManager = GetComponent <ParamManager>();
 }
Beispiel #37
0
 private void InflictDamage(WorldObject attackWO)
 {
     attackWO.TakeDamage(paramManager.AttackDamage, attackWO.transform.position, worldObject);
 }
        private static void MutateArmor(WorldObject wo, TreasureDeath profile, bool isMagical, LootTables.ArmorType armorType)
        {
            wo.LongDesc = wo.Name;

            //wo.AppraisalItemSkill = 7;
            //wo.AppraisalLongDescDecoration = AppraisalLongDescDecorations.PrependWorkmanship;

            int materialType = GetMaterialType(wo, profile.Tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }

            int gemCount = ThreadSafeRandom.Next(1, 6);
            int gemType  = ThreadSafeRandom.Next(10, 50);

            wo.GemCount = gemCount;
            wo.GemType  = (MaterialType)gemType;

            int workmanship = GetWorkmanship(profile.Tier);

            wo.ItemWorkmanship = workmanship;

            double materialMod    = LootTables.getMaterialValueModifier(wo);
            double gemMaterialMod = LootTables.getGemMaterialValueModifier(wo);
            var    value          = GetValue(profile.Tier, workmanship, gemMaterialMod, materialMod);

            wo.Value = value;

            int wield;

            if (profile.Tier > 6 && armorType != LootTables.ArmorType.CovenantArmor && armorType != LootTables.ArmorType.OlthoiArmor)
            {
                wo.WieldRequirements = WieldRequirement.Level;
                wo.WieldSkillType    = (int)Skill.Axe; // Set by examples from PCAP data

                wield = profile.Tier switch
                {
                    7 => 150, // In this instance, used for indicating player level, rather than skill level
                    _ => 180, // In this instance, used for indicating player level, rather than skill level
                };

                wo.WieldDifficulty = wield;
            }

            if (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor)
            {
                int chance     = ThreadSafeRandom.Next(1, 3);
                var wieldSkill = chance switch
                {
                    1 => Skill.MagicDefense,
                    2 => Skill.MissileDefense,
                    _ => Skill.MeleeDefense,
                };
                wield = GetCovenantWieldReq(profile.Tier, wieldSkill);

                wo.WieldRequirements = WieldRequirement.RawSkill;
                wo.WieldSkillType    = (int)wieldSkill;
                wo.WieldDifficulty   = wield;

                // used by tinkering requirements for copper/silver
                wo.ItemSkillLimit = (uint)wieldSkill;
            }

            // Setting random color
            wo.PaletteTemplate = ThreadSafeRandom.Next(1, 2047);
            wo.Shade           = .1 * ThreadSafeRandom.Next(0, 9);

            wo = AssignArmorLevel(wo, profile.Tier, armorType);

            wo = AssignEquipmentSetId(wo, profile);

            if (isMagical)
            {
                bool covenantArmor = false || (armorType == LootTables.ArmorType.CovenantArmor || armorType == LootTables.ArmorType.OlthoiArmor);
                wo = AssignMagic(wo, profile, covenantArmor);
            }
            else
            {
                wo.ItemManaCost   = null;
                wo.ItemMaxMana    = null;
                wo.ItemCurMana    = null;
                wo.ItemSpellcraft = null;
                wo.ItemDifficulty = null;
            }

            // try mutate burden, if MutateFilter exists
            if (wo.HasMutateFilter(MutateFilter.EncumbranceVal))
            {
                MutateBurden(wo, profile.Tier, false);
            }

            RandomizeColor(wo);
        }
        private static WorldObject CreateArmor(TreasureDeath profile, bool isMagical, bool isArmor, LootBias lootBias = LootBias.UnBiased, bool mutate = true)
        {
            var minType = LootTables.ArmorType.Helms;
            var maxType = new LootTables.ArmorType();

            switch (profile.Tier)
            {
            case 1:
            default:
                maxType = LootTables.ArmorType.ChainmailArmor;
                break;

            case 2:
                maxType = LootTables.ArmorType.DiforsaArmor;
                break;

            case 3:
            case 4:
                maxType = LootTables.ArmorType.CovenantArmor;
                break;

            case 5:
                maxType = LootTables.ArmorType.AlduressaArmor;
                break;

            case 6:
                maxType = LootTables.ArmorType.HaebreanArmor;
                break;

            case 7:
            case 8:
                maxType = LootTables.ArmorType.OlthoiAlduressaArmor;
                break;
            }

            // Added for making clothing drops their own drop, and not involved in armor roll chance
            LootTables.ArmorType armorType;
            if (isArmor == true)
            {
                armorType = (LootTables.ArmorType)ThreadSafeRandom.Next((int)minType, (int)maxType);
            }
            else
            {
                armorType = LootTables.ArmorType.MiscClothing;
            }

            int[] table = LootTables.GetLootTable(armorType);

            int rng = ThreadSafeRandom.Next(0, table.Length - 1);

            int armorWeenie = table[rng];

            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)armorWeenie);

            if (wo != null && mutate)
            {
                MutateArmor(wo, profile, isMagical, armorType);
            }

            return(wo);
        }
Beispiel #40
0
 public CombatLogSender(WorldObject src, CombatLogServerPacket msg, float dist)
 {
     i_source  = src;
     i_message = msg;
     i_distSq  = dist * dist;
 }
Beispiel #41
0
        // Thanks to the original pioneers in the emulator community for help decoding these structures!
        public void Execute(Emote emote, WorldObject target)
        {
            var player   = target is Player ? (Player)target : null;
            var creature = target is Creature ? (Creature)target : null;

            switch (emote.Type)
            {
            case EmoteType.Act:

                if (player != null)
                {
                    WorldObject.ActOnUse(player);
                }
                break;

            case EmoteType.Activate:

                target.Activate(WorldObject);
                break;

            case EmoteType.AddCharacterTitle:

                if (player != null)
                {
                    player.AddTitle((CharacterTitle)emote.Stat);
                }
                break;

            case EmoteType.AddContract:

                if (player != null)
                {
                    player.AddContract(emote.Stat);
                }
                break;

            case EmoteType.AdminSpam:

                var text    = Replace(emote.Message, target, WorldObject);
                var players = WorldManager.GetAll();
                foreach (var _player in players)
                {
                    _player.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.AdminTell));
                }
                break;

            case EmoteType.AwardLevelProportionalSkillXP:

                if (player != null)
                {
                    player.GrantLevelProportionalSkillXP((Skill)emote.Stat, emote.Percent, emote.Max);
                }
                break;

            case EmoteType.AwardLevelProportionalXP:

                if (player != null)
                {
                    player.GrantLevelProportionalXp(emote.Percent, emote.Max);
                }
                break;

            case EmoteType.AwardLuminance:

                if (player != null)
                {
                    player.GrantLuminance((long)emote.Amount);
                }
                break;

            case EmoteType.AwardNoShareXP:

                if (player != null)
                {
                    player.GrantXp((long)emote.Amount);
                }
                break;

            case EmoteType.AwardSkillPoints:

                if (player != null)
                {
                    player.AwardSkillPoints((Skill)emote.Stat, (uint)emote.Amount);
                }
                break;

            case EmoteType.AwardSkillXP:

                if (player != null)
                {
                    player.RaiseSkillGameAction((Skill)emote.Stat, (uint)emote.Amount, true);
                }
                break;

            case EmoteType.AwardTrainingCredits:

                if (player != null)
                {
                    player.AddSkillCredits((int)emote.Amount, true);
                }
                break;

            case EmoteType.AwardXP:

                if (player != null)
                {
                    player.EarnXP((long)emote.Amount);
                }
                break;

            case EmoteType.BLog:
                break;

            case EmoteType.CastSpell:

                if (WorldObject is Player)
                {
                    (WorldObject as Player).CreatePlayerSpell(emote.SpellId);
                }

                else if (WorldObject is Creature)
                {
                    (WorldObject as Creature).CreateCreatureSpell(target.Guid, emote.SpellId);
                }

                break;

            case EmoteType.CastSpellInstant:

                if (WorldObject is Player)
                {
                    (WorldObject as Player).CreatePlayerSpell(emote.SpellId);
                }

                else if (WorldObject is Creature)
                {
                    (WorldObject as Creature).CreateCreatureSpell(target.Guid, emote.SpellId);
                }

                break;

            case EmoteType.CloseMe:

                target.Close(WorldObject);
                break;

            case EmoteType.CreateTreasure:
                break;

            case EmoteType.DecrementIntStat:

                var id   = (PropertyInt)emote.Stat;
                var prop = target.GetProperty(id);
                if (prop != null)
                {
                    target.SetProperty(id, prop.Value - 1);
                }
                break;

            case EmoteType.DecrementMyQuest:
                break;

            case EmoteType.DecrementQuest:
                break;

            case EmoteType.DeleteSelf:

                WorldObject.CurrentLandblock.RemoveWorldObject(WorldObject.Guid, false);
                break;

            case EmoteType.DirectBroadcast:

                text = Replace(emote.Message, target, WorldObject);
                if (player != null)
                {
                    player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.Broadcast));
                }
                break;

            case EmoteType.EraseMyQuest:
                break;

            case EmoteType.EraseQuest:
                break;

            case EmoteType.FellowBroadcast:

                text = Replace(emote.Message, target, WorldObject);
                if (player != null)
                {
                    var fellowship = player.Fellowship;
                    if (fellowship != null)
                    {
                        player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.Broadcast));
                    }
                    else
                    {
                        foreach (var fellow in fellowship.FellowshipMembers)
                        {
                            player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.Broadcast));
                        }
                    }
                }
                break;

            case EmoteType.ForceMotion:

                WorldObject.PhysicsObj.DoMotion(emote.Motion, new MovementParameters());
                break;

            case EmoteType.Generate:

                var wcid = emote.CreateProfile.ClassID;
                var item = WorldObjectFactory.CreateNewWorldObject(wcid);
                break;

            case EmoteType.Give:

                if (player != null)
                {
                    wcid = emote.CreateProfile.ClassID;
                    item = WorldObjectFactory.CreateNewWorldObject(wcid);
                    if (item == null)
                    {
                        break;
                    }

                    var success = player.TryAddToInventory(item);
                }
                break;

            case EmoteType.Goto:
                InqCategory(EmoteCategory.GotoSet, emote);
                break;

            case EmoteType.IncrementIntStat:

                id   = (PropertyInt)emote.Stat;
                prop = target.GetProperty(id);
                if (prop != null)
                {
                    target.SetProperty(id, prop.Value + 1);
                }
                break;

            case EmoteType.IncrementMyQuest:
                break;

            case EmoteType.IncrementQuest:
                break;

            case EmoteType.InflictVitaePenalty:

                if (player != null)
                {
                    player.VitaeCpPool++;
                }
                break;

            case EmoteType.InqAttributeStat:

                if (creature != null)
                {
                    var attr    = creature.GetCreatureAttribute((PropertyAttribute)emote.Stat);
                    var success = attr != null && attr.Ranks >= emote.Min && attr.Ranks <= emote.Max;
                    InqCategory(success ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqBoolStat:
                InqProperty(target.GetProperty((PropertyBool)emote.Stat), emote);
                break;

            case EmoteType.InqContractsFull:

                if (player != null)
                {
                    var contracts = player.TrackedContracts;
                    InqCategory(contracts.Count != 0 ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqEvent:

                var started = EventManager.IsEventStarted(emote.Message);
                InqCategory(started ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                break;

            case EmoteType.InqFellowNum:
                InqCategory(player != null && player.Fellowship != null ? EmoteCategory.TestSuccess : EmoteCategory.TestNoFellow, emote);
                break;

            case EmoteType.InqFellowQuest:
                break;

            case EmoteType.InqFloatStat:
                InqProperty(target.GetProperty((PropertyFloat)emote.Stat), emote);
                break;

            case EmoteType.InqInt64Stat:
                InqProperty(target.GetProperty((PropertyInt64)emote.Stat), emote);
                break;

            case EmoteType.InqIntStat:
                InqProperty(target.GetProperty((PropertyInt)emote.Stat), emote);
                break;

            case EmoteType.InqMyQuest:
                break;

            case EmoteType.InqMyQuestBitsOff:
                break;

            case EmoteType.InqMyQuestBitsOn:
                break;

            case EmoteType.InqMyQuestSolves:
                break;

            case EmoteType.InqNumCharacterTitles:

                if (player != null)
                {
                    InqCategory(player.NumCharacterTitles != 0 ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqOwnsItems:

                if (player != null)
                {
                    InqCategory(player.Inventory.Count > 0 ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqPackSpace:

                if (player != null)
                {
                    var freeSpace = player.ContainerCapacity > player.ItemCapacity;
                    InqCategory(freeSpace ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqQuest:
                break;

            case EmoteType.InqQuestBitsOff:
                break;

            case EmoteType.InqQuestBitsOn:
                break;

            case EmoteType.InqQuestSolves:
                break;

            case EmoteType.InqRawAttributeStat:

                if (creature != null)
                {
                    var attr    = creature.GetCreatureAttribute((PropertyAttribute)emote.Stat);
                    var success = attr != null && attr.Base >= emote.Min && attr.Base <= emote.Max;
                    InqCategory(success ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqRawSecondaryAttributeStat:

                if (creature != null)
                {
                    var vital   = creature.GetCreatureVital((PropertyAttribute2nd)emote.Stat);
                    var success = vital != null && vital.Base >= emote.Min && vital.Base <= emote.Max;
                    InqCategory(success ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqRawSkillStat:

                if (creature != null)
                {
                    var skill   = creature.GetCreatureSkill((Skill)emote.Stat);
                    var success = skill != null && skill.Base >= emote.Min && skill.Base <= emote.Max;
                    InqCategory(success ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqSecondaryAttributeStat:

                if (creature != null)
                {
                    var vital   = creature.GetCreatureVital((PropertyAttribute2nd)emote.Stat);
                    var success = vital != null && vital.Ranks >= emote.Min && vital.Ranks <= emote.Max;
                    InqCategory(success ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqSkillSpecialized:

                if (creature != null)
                {
                    var skill = creature.GetCreatureSkill((Skill)emote.Stat);
                    InqProperty(skill.Status == SkillStatus.Specialized, emote);
                }
                break;

            case EmoteType.InqSkillStat:

                if (creature != null)
                {
                    var skill   = creature.GetCreatureSkill((Skill)emote.Stat);
                    var success = skill != null && skill.Ranks >= emote.Min && skill.Ranks <= emote.Max;
                    InqCategory(success ? EmoteCategory.TestSuccess : EmoteCategory.TestFailure, emote);
                }
                break;

            case EmoteType.InqSkillTrained:

                if (creature != null)
                {
                    var skill = creature.GetCreatureSkill((Skill)emote.Stat);
                    InqProperty(skill.Status == SkillStatus.Trained || skill.Status == SkillStatus.Specialized, emote);
                }
                break;

            case EmoteType.InqStringStat:

                InqProperty(target.GetProperty((PropertyString)emote.Stat), emote);
                break;

            case EmoteType.InqYesNo:
                ConfirmationManager.ProcessConfirmation(emote.Stat, true);
                break;

            case EmoteType.Invalid:
                break;

            case EmoteType.KillSelf:

                if (player != null)
                {
                    player.Smite(WorldObject.Guid);
                }
                break;

            case EmoteType.LocalBroadcast:

                text = Replace(emote.Message, target, WorldObject);
                WorldObject.CurrentLandblock.EnqueueBroadcastSystemChat(WorldObject, text, ChatMessageType.Broadcast);
                break;

            case EmoteType.LocalSignal:
                break;

            case EmoteType.LockFellow:

                if (player != null && player.Fellowship != null)
                {
                    player.HandleActionFellowshipChangeOpenness(false);
                }
                break;

            case EmoteType.Motion:

                WorldObject.PhysicsObj.DoMotion(emote.Motion, new MovementParameters());
                break;

            case EmoteType.Move:

                if (creature != null)
                {
                    var movement = creature.PhysicsObj.MovementManager.MoveToManager;
                    movement.MoveToPosition(new Physics.Common.Position(emote.Position), new MovementParameters());
                }
                break;

            case EmoteType.MoveHome:

                if (creature != null)
                {
                    var movement = creature.PhysicsObj.MovementManager.MoveToManager;
                    movement.MoveToPosition(new Physics.Common.Position(creature.Home), new MovementParameters());
                }
                break;

            case EmoteType.MoveToPos:

                if (creature != null)
                {
                    var movement = creature.PhysicsObj.MovementManager.MoveToManager;
                    movement.MoveToPosition(new Physics.Common.Position(emote.Position), new MovementParameters());
                }
                break;

            case EmoteType.OpenMe:

                target.Open(WorldObject);
                break;

            case EmoteType.PetCastSpellOnOwner:

                if (WorldObject is Creature)
                {
                    (WorldObject as Creature).CreateCreatureSpell(target.Guid, emote.SpellId);
                }
                break;

            case EmoteType.PhysScript:

                target.PhysicsObj.play_script(emote.PScript, 1.0f);
                break;

            case EmoteType.PopUp:
                ConfirmationManager.AddConfirmation(new Confirmation((ConfirmationType)emote.Stat, emote.Message, WorldObject.Guid.Full, target.Guid.Full));
                break;

            case EmoteType.RemoveContract:

                if (player != null)
                {
                    player.HandleActionAbandonContract(emote.Stat);
                }
                break;

            case EmoteType.RemoveVitaePenalty:

                if (player != null)
                {
                    player.VitaeCpPool = 0;
                }
                break;

            case EmoteType.ResetHomePosition:

                if (creature != null)
                {
                    target.Home = emote.Position;
                }
                break;

            case EmoteType.Say:

                text = Replace(emote.Message, target, WorldObject);
                if (player != null)
                {
                    player.CurrentLandblock.EnqueueBroadcastLocalChat(player, text);
                }
                break;

            case EmoteType.SetAltRacialSkills:
                break;

            case EmoteType.SetBoolStat:
                target.SetProperty((PropertyBool)emote.Stat, emote.Amount == 0 ? false : true);
                break;

            case EmoteType.SetEyePalette:

                if (creature != null)
                {
                    creature.EyesPaletteDID = (uint)emote.Display;
                }
                break;

            case EmoteType.SetEyeTexture:

                if (creature != null)
                {
                    creature.EyesTextureDID = (uint)emote.Display;
                }
                break;

            case EmoteType.SetFloatStat:
                target.SetProperty((PropertyFloat)emote.Stat, (float)emote.Amount);
                break;

            case EmoteType.SetHeadObject:

                if (creature != null)
                {
                    creature.HeadObjectDID = (uint)emote.Display;
                }
                break;

            case EmoteType.SetHeadPalette:
                break;

            case EmoteType.SetInt64Stat:
                target.SetProperty((PropertyInt)emote.Stat, (int)emote.Amount);
                break;

            case EmoteType.SetIntStat:
                target.SetProperty((PropertyInt)emote.Stat, (int)emote.Amount);
                break;

            case EmoteType.SetMouthPalette:
                break;

            case EmoteType.SetMouthTexture:

                if (creature != null)
                {
                    creature.MouthTextureDID = (uint)emote.Display;
                }
                break;

            case EmoteType.SetMyQuestBitsOff:
                break;

            case EmoteType.SetMyQuestBitsOn:
                break;

            case EmoteType.SetMyQuestCompletions:
                break;

            case EmoteType.SetNosePalette:
                break;

            case EmoteType.SetNoseTexture:

                if (creature != null)
                {
                    creature.NoseTextureDID = (uint)emote.Display;
                }
                break;

            case EmoteType.SetQuestBitsOff:
                break;

            case EmoteType.SetQuestBitsOn:
                break;

            case EmoteType.SetQuestCompletions:
                break;

            case EmoteType.SetSanctuaryPosition:

                if (player != null)
                {
                    player.Sanctuary = emote.Position;
                }
                break;

            case EmoteType.Sound:
                target.CurrentLandblock.EnqueueBroadcastSound(target, (Sound)emote.Sound);
                break;

            case EmoteType.SpendLuminance:
                if (player != null)
                {
                    player.SpendLuminance((long)emote.Amount);
                }
                break;

            case EmoteType.StampFellowQuest:
                break;

            case EmoteType.StampMyQuest:
                break;

            case EmoteType.StampQuest:
                break;

            case EmoteType.StartBarber:
                break;

            case EmoteType.StartEvent:

                EventManager.StartEvent(emote.Message);
                break;

            case EmoteType.StopEvent:

                EventManager.StopEvent(emote.Message);
                break;

            case EmoteType.TakeItems:

                if (player != null)
                {
                    wcid = emote.CreateProfile.ClassID;
                    item = WorldObjectFactory.CreateNewWorldObject(wcid);
                    if (item == null)
                    {
                        break;
                    }

                    var success = player.TryRemoveItemFromInventoryWithNetworking(item, (ushort)emote.Amount);
                }
                break;

            case EmoteType.TeachSpell:

                if (player != null)
                {
                    player.LearnSpellWithNetworking(emote.SpellId);
                }
                break;

            case EmoteType.TeleportSelf:

                if (WorldObject is Player)
                {
                    (WorldObject as Player).Teleport(emote.Position);
                }
                break;

            case EmoteType.TeleportTarget:

                if (player != null)
                {
                    player.Teleport(emote.Position);
                }
                break;

            case EmoteType.Tell:

                text = Replace(emote.Message, target, WorldObject);
                if (player != null)
                {
                    player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.Tell));
                }
                break;

            case EmoteType.TellFellow:

                text = Replace(emote.Message, target, WorldObject);
                if (player != null)
                {
                    var fellowship = player.Fellowship;
                    if (fellowship != null)
                    {
                        player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.Tell));
                    }
                    else
                    {
                        foreach (var fellow in fellowship.FellowshipMembers)
                        {
                            player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.Tell));
                        }
                    }
                }
                break;

            case EmoteType.TextDirect:

                text = Replace(emote.Message, target, WorldObject);
                if (player != null)
                {
                    player.Session.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.AdminTell));
                }
                break;

            case EmoteType.Turn:

                var mvp = new MovementParameters();
                mvp.DesiredHeading = new AFrame(emote.Frame).get_heading();

                // increment animation sequence
                WorldObject.PhysicsObj.LastMoveWasAutonomous = false;
                WorldObject.PhysicsObj.cancel_moveto();
                WorldObject.PhysicsObj.TurnToHeading(mvp);
                break;

            case EmoteType.TurnToTarget:

                WorldObject.PhysicsObj.TurnToObject(target.Guid.Full, new MovementParameters());
                break;

            case EmoteType.UntrainSkill:

                if (player != null)
                {
                    player.UntrainSkill((Skill)emote.Stat, 1);
                }
                break;

            case EmoteType.UpdateFellowQuest:
                break;

            case EmoteType.UpdateMyQuest:
                break;

            case EmoteType.UpdateQuest:
                break;

            case EmoteType.WorldBroadcast:

                text    = Replace(emote.Message, target, WorldObject);
                players = WorldManager.GetAll();
                foreach (var _player in players)
                {
                    _player.Network.EnqueueSend(new GameMessageSystemChat(text, ChatMessageType.WorldBroadcast));
                }
                break;
            }
        }
        private static WorldObject CreateSocietyArmor(TreasureDeath profile, bool mutate)
        {
            int society   = 0;
            int armortype = 0;

            if (profile.TreasureType >= 2971 && profile.TreasureType <= 2980)
            {
                society = 0; // CH
            }
            else if (profile.TreasureType >= 2981 && profile.TreasureType <= 2990)
            {
                society = 1; // EW
            }
            else if (profile.TreasureType >= 2991 && profile.TreasureType <= 3000)
            {
                society = 2; // RB
            }
            switch (profile.TreasureType)
            {
            case 2971:
            case 2981:
            case 2991:
                armortype = 0;     // BP
                break;

            case 2972:
            case 2982:
            case 2992:
                armortype = 1;     // Gauntlets
                break;

            case 2973:
            case 2983:
            case 2993:
                armortype = 2;     // Girth
                break;

            case 2974:
            case 2984:
            case 2994:
                armortype = 3;     // Greaves
                break;

            case 2975:
            case 2985:
            case 2995:
                armortype = 4;     // Helm
                break;

            case 2976:
            case 2986:
            case 2996:
                armortype = 5;     // Pauldrons
                break;

            case 2977:
            case 2987:
            case 2997:
                armortype = 6;     // Tassets
                break;

            case 2978:
            case 2988:
            case 2998:
                armortype = 7;     // Vambraces
                break;

            case 2979:
            case 2989:
            case 2999:
                armortype = 8;     // Sollerets
                break;

            default:
                break;
            }

            int         societyArmorWeenie = LootTables.SocietyArmorMatrix[armortype][society];
            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)societyArmorWeenie);

            if (wo != null && mutate)
            {
                MutateSocietyArmor(wo, profile, true);
            }

            return(wo);
        }
    private void Update()
    {
        if (_exitingWorld)
        {
            return;
        }
        if (_kickFromWorld)
        {
            ExitWorld();
            MainManager.Instance.LoadScene(MainManager.LOGIN_SCENE);
            return;
        }

        lock (UPDATE_METHOD_LOCK)
        {
            // Distance check.
            foreach (GameObject obj in _gameObjects.Values)
            {
                if (obj != null && CalculateDistance(obj.transform.position) > VISIBILITY_RADIUS)
                {
                    WorldObject worldObject = obj.GetComponent <WorldObject>();
                    if (worldObject != null && !_deleteQueue.Contains(worldObject.GetObjectId()))
                    {
                        _deleteQueue.Add(worldObject.GetObjectId());
                    }
                }
            }

            // Delete pending objects.
            foreach (long objectId in _deleteQueue)
            {
                if (_gameObjects.ContainsKey(objectId))
                {
                    GameObject obj = _gameObjects[objectId];
                    if (obj != null)
                    {
                        // Disable.
                        obj.GetComponent <WorldObjectText>().GetNameMesh().gameObject.SetActive(false);
                        obj.SetActive(false);

                        // Remove from objects list.
                        ((IDictionary <long, GameObject>)_gameObjects).Remove(obj.GetComponent <WorldObject>().GetObjectId());

                        // Delete game object from world with a delay.
                        StartCoroutine(DelayedDestroy(obj));
                    }
                }

                // If object was current target, unselect it.
                if (_targetWorldObject != null && _targetWorldObject.GetObjectId() == objectId)
                {
                    SetTarget(null);
                }
            }
            if (_deleteQueue.Count > 0)
            {
                _deleteQueue.Clear();
            }

            // Move pending objects.
            foreach (KeyValuePair <long, MovementHolder> entry in _moveQueue)
            {
                Vector3 position = new Vector3(entry.Value.GetX(), entry.Value.GetY(), entry.Value.GetZ());
                if (_gameObjects.ContainsKey(entry.Key))
                {
                    GameObject obj = _gameObjects[entry.Key];
                    if (obj != null)
                    {
                        WorldObject worldObject = obj.GetComponent <WorldObject>();
                        if (worldObject != null)
                        {
                            if (CalculateDistance(position) > VISIBILITY_RADIUS) // Moved out of sight.
                            {
                                // Broadcast self position, object out of sight.
                                NetworkManager.SendPacket(new LocationUpdateRequest(MovementController.GetStoredPosition().x, MovementController.GetStoredPosition().y, MovementController.GetStoredPosition().z, MovementController.GetStoredRotation()));
                                _deleteQueue.Add(worldObject.GetObjectId());
                            }
                            else
                            {
                                worldObject.MoveObject(position, entry.Value.GetHeading());
                            }
                        }
                    }
                }
                // Check self teleporting.
                else if (entry.Key == 0)
                {
                    _activeCharacter.transform.localPosition             = position;
                    _activeCharacter.GetComponent <Rigidbody>().position = position;
                }
                // Request unknown object info from server.
                else if (CalculateDistance(position) <= VISIBILITY_RADIUS)
                {
                    NetworkManager.SendPacket(new ObjectInfoRequest(entry.Key));
                    // Broadcast self position, in case player is not moving.
                    NetworkManager.SendPacket(new LocationUpdateRequest(MovementController.GetStoredPosition().x, MovementController.GetStoredPosition().y, MovementController.GetStoredPosition().z, MovementController.GetStoredRotation()));
                }

                ((IDictionary <long, MovementHolder>)_moveQueue).Remove(entry.Key);
            }

            // Animate pending objects.
            foreach (KeyValuePair <long, AnimationHolder> entry in _animationQueue)
            {
                if (_gameObjects.ContainsKey(entry.Key))
                {
                    GameObject obj = _gameObjects[entry.Key];
                    if (obj != null)
                    {
                        WorldObject worldObject = obj.GetComponent <WorldObject>();
                        if (worldObject != null)
                        {
                            if (worldObject.GetDistance() <= VISIBILITY_RADIUS) // Object is in sight radius.
                            {
                                worldObject.AnimateObject(entry.Value.GetVelocityX(), entry.Value.GetVelocityZ(), entry.Value.IsTriggerJump(), entry.Value.IsInWater(), entry.Value.IsGrounded());
                            }
                        }
                    }
                }

                ((IDictionary <long, AnimationHolder>)_animationQueue).Remove(entry.Key);
            }

            // Update pending characters.
            foreach (KeyValuePair <long, CharacterDataHolder> entry in _characterUpdateQueue)
            {
                if (_gameObjects.ContainsKey(entry.Key))
                {
                    GameObject obj = _gameObjects[entry.Key];
                    if (obj != null)
                    {
                        WorldObject worldObject = obj.GetComponent <WorldObject>();
                        if (worldObject != null)
                        {
                            if (worldObject.GetDistance() <= VISIBILITY_RADIUS) // Object is in sight radius.
                            {
                                DynamicCharacterAvatar avatar = obj.GetComponent <DynamicCharacterAvatar>();
                                if (avatar != null)
                                {
                                    // TODO: Manage more things than just item updates.
                                    CharacterDataHolder oldData = worldObject.GetCharacterData();
                                    CharacterDataHolder newData = entry.Value;

                                    int headItem = newData.GetHeadItem();
                                    if (headItem != oldData.GetHeadItem())
                                    {
                                        if (headItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.HEAD);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, headItem);
                                        }
                                    }

                                    int chestItem = newData.GetChestItem();
                                    if (chestItem != oldData.GetChestItem())
                                    {
                                        if (chestItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.CHEST);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, chestItem);
                                        }
                                    }

                                    int legsItem = newData.GetLegsItem();
                                    if (legsItem != oldData.GetLegsItem())
                                    {
                                        if (legsItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.LEGS);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, legsItem);
                                        }
                                    }

                                    int handsItem = newData.GetHandsItem();
                                    if (handsItem != oldData.GetHandsItem())
                                    {
                                        if (handsItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.HANDS);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, handsItem);
                                        }
                                    }

                                    int feetItem = newData.GetFeetItem();
                                    if (feetItem != oldData.GetFeetItem())
                                    {
                                        if (feetItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.FEET);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, feetItem);
                                        }
                                    }

                                    int leftHandItem = newData.GetLeftHandItem();
                                    if (leftHandItem != oldData.GetLeftHandItem())
                                    {
                                        if (leftHandItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.LEFT_HAND);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, leftHandItem);
                                        }
                                    }

                                    int rightHandItem = newData.GetRightHandItem();
                                    if (rightHandItem != oldData.GetRightHandItem())
                                    {
                                        if (rightHandItem == 0)
                                        {
                                            CharacterManager.Instance.UnEquipItem(avatar, ItemSlot.RIGHT_HAND);
                                        }
                                        else
                                        {
                                            CharacterManager.Instance.EquipItem(avatar, rightHandItem);
                                        }
                                    }

                                    // Update world object with new data.
                                    worldObject.SetCharacterData(newData);
                                }
                            }
                        }
                    }
                }

                ((IDictionary <long, CharacterDataHolder>)_characterUpdateQueue).Remove(entry.Key);
            }
        }
    }
Beispiel #44
0
    private void SpawnSection(float zOffset, int startPos)
    {
        #region Init vars and prepare obstacles[] and hasCoins[]
        //walls keeps track of already spawned walls in certain prefabs ex: a bridge shouldnt spawn walls next to it
        bool[] walls = new bool[sectionLength / 3];

        //Decide which sectionType to spawn, 0 is Ice, 1 is Market, 2 is Dragon Dance
        int sectionType = Random.Range(0, sectionPrefabs.Length);
        //sectionType = 1;

        //this code recycles the obstacles[]
        //clear old obstacle area
        for (int x = 0; x < obstacles.GetLength(0); x++)
        {
            for (int y = 0; y < sectionLength; y++)
            {
                obstacles[x, y] = TileTypes.Empty;
                hasCoins[x, y]  = false;
            }
        }
        #endregion

        #region Spawn main path/obstacles
        //For each path loop through each Z
        for (int pathIndex = 0; pathIndex < paths.Length; pathIndex++)
        {
            for (int z = startPos; z < sectionLength; z++)
            {
                //If RNG spawn an Obstacle, if dragon dance double the odds(roll twice)
                if (Random.Range(0, 100f) < generationSettings.obstacleChance || (sectionType == 2 && Random.Range(0, 100f) < generationSettings.obstacleChance))
                {
                    //get the length of the spawned obstacle
                    int amountToSkip = TrySpawnObstacle(sectionType, pathIndex, z, zOffset, ref walls);
                    //if its 0 then it failed to spawn an obstacle, so SpawnPath else add amountToSkip to z to skip ahead to end of obstacle
                    if (amountToSkip == 0)
                    {
                        SpawnPath(sectionType, pathIndex, z, zOffset);
                    }
                    else if (amountToSkip == int.MaxValue)
                    {
                        z += 2;
                        SpawnPath(sectionType, pathIndex, z, zOffset);
                    }
                    else
                    {
                        z += amountToSkip - 1;
                    }
                }
                else
                {
                    SpawnPath(sectionType, pathIndex, z, zOffset);
                }
            }
        }
        #endregion

        #region Spawn Floor/Walls/Transition
        //Spawn the Walls/Floors
        //Spawn the transition if not currently a canal
        if (sectionType != 0)
        {
            SpawnObject((int)WorldObjectType.Transition, new Vector3(0, 0, zOffset - 1.5f), 0);
        }

        //get a random wall index (currently only 1)
        int index = 0;
        for (int z = 0; z < walls.Length; z++)
        {
            //if has no wall spawn wall
            if (!walls[z])
            {
                //Spawn right wall
                index = Random.Range(0, 2) == 0 ? (int)WorldObjectType.Wall : (int)WorldObjectType.Wall2;
                SpawnObject(index, new Vector3(5.5f, 0, pathWidth + z * pathWidth * 3 + zOffset), 90);
                //Spawn left wall
                index = Random.Range(0, 2) == 0 ? (int)WorldObjectType.Wall : (int)WorldObjectType.Wall2;
                SpawnObject(index, new Vector3(-5.5f, 0, pathWidth + z * pathWidth * 3 + zOffset), -90);
            }

            //Spawn the Floor
            switch (sectionType)
            {
            case 0: index = (int)WorldObjectType.IceFloor; break;

            case 1: index = (int)WorldObjectType.Floor; break;

            case 2: index = (int)WorldObjectType.Floor; break;
            }
            SpawnObject(index, new Vector3(0, 0, pathWidth + z * pathWidth * 3 + zOffset), 0);
        }
        #endregion

        #region Fill empty space
        FillEmpty(sectionType, zOffset, startPos);
        #endregion

        #region Debug stuff
        if (isDebugMode)
        {
            for (int z = 0; z < sectionLength; z++)
            {
                for (int x = 0; x < 3; x++)
                {
                    Color colorType     = Color.white;
                    float heightToSpawn = 0.5f;
                    switch (obstacles[x, z])
                    {
                    case TileTypes.Path: colorType = Color.green; break;

                    case TileTypes.RaisedPath: colorType = Color.green; heightToSpawn = 1.5f; break;

                    case TileTypes.Blocked: colorType = Color.red; break;

                    case TileTypes.JumpObstacle: colorType = Color.cyan; heightToSpawn = 1.5f; break;

                    case TileTypes.RaisedJumpObstacle: colorType = Color.cyan; heightToSpawn = 2; break;

                    case TileTypes.SlideObstacle: colorType = Color.black; break;

                    case TileTypes.RaisedSlideObstacle: colorType = Color.black; heightToSpawn = 1.5f; break;
                    }

                    GameObject debugCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    debugCube.GetComponent <Renderer>().material.color = colorType;
                    debugCube.tag = "Debug";
                    debugCube.transform.position = new Vector3(x * pathWidth - pathWidth, heightToSpawn, z * pathWidth + zOffset);
                    toMove.Add(debugCube.transform);
                }
            }
        }
        #endregion

        //To prevent a bug where you cant walk up the next raised path if transitioning from water to land, so remove that feature, no time to proper fix
        if (sectionType == 0)
        {
            for (int i = 0; i < paths.Length; i++)
            {
                paths[i].currentHeight = 0;
            }
        }

        //temp spawn debug cube, NEED some object in the final position, replace with transitionObject
        Vector3     spawnPosT = new Vector3(1 * pathWidth - pathWidth, 0, (sectionLength - 1) * pathWidth + zOffset);
        WorldObject woT       = WorldObjectPool.Instance.Get((int)WorldObjectType.Debug);
        toMove.Add(woT.transform);
        woT.transform.position = spawnPosT;
        woT.gameObject.SetActive(true);
    }
Beispiel #45
0
 static SmallWoodCartObject()
 {
     WorldObject.AddOccupancy <SmallWoodCartObject>(new List <BlockOccupancy>(0));
 }
        private static WorldObject CreateMeleeWeapon(int tier, bool isMagical)
        {
            Skill wieldSkillType = Skill.None;

            int    weaponWeenie       = 0;
            int    damage             = 0;
            double damageVariance     = 0;
            double weaponDefense      = 0;
            double weaponOffense      = 0;
            int    longDescDecoration = 5;

            ///Properties for weapons
            double           magicD           = GetMissileDMod(tier);
            double           missileD         = GetMissileDMod(tier);
            int              gemCount         = ThreadSafeRandom.Next(1, 5);
            int              gemType          = ThreadSafeRandom.Next(10, 50);
            int              workmanship      = GetWorkmanship(tier);
            int              wieldDiff        = GetWield(tier, 3);
            WieldRequirement wieldRequirments = WieldRequirement.RawSkill;

            int eleType    = ThreadSafeRandom.Next(0, 4);
            int weaponType = ThreadSafeRandom.Next(0, 3);

            switch (weaponType)
            {
            case 0:
                // Heavy Weapons
                wieldSkillType = Skill.HeavyWeapons;
                int heavyWeaponsType = ThreadSafeRandom.Next(0, 22);
                weaponWeenie = LootTables.HeavyWeaponsMatrix[heavyWeaponsType][eleType];

                switch (heavyWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                    weaponDefense  = GetMaxDamageMod(tier, 18);
                    weaponOffense  = GetMaxDamageMod(tier, 22);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Axe);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Axe);
                    break;

                case 3:
                case 4:
                case 5:
                    weaponDefense = GetMaxDamageMod(tier, 20);
                    weaponOffense = GetMaxDamageMod(tier, 20);

                    damage = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Dagger);

                    if (heavyWeaponsType == 3)
                    {
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.Dagger);
                    }
                    if (heavyWeaponsType == 4 || heavyWeaponsType == 5)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.DaggerMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.DaggerMulti);
                    }
                    break;

                case 6:
                case 7:
                case 8:
                case 9:
                    weaponDefense  = GetMaxDamageMod(tier, 22);
                    weaponOffense  = GetMaxDamageMod(tier, 18);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Mace);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Mace);
                    break;

                case 10:
                case 11:
                case 12:
                    weaponDefense  = GetMaxDamageMod(tier, 15);
                    weaponOffense  = GetMaxDamageMod(tier, 25);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spear);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Spear);
                    break;

                case 13:
                case 14:
                    weaponDefense  = GetMaxDamageMod(tier, 25);
                    weaponOffense  = GetMaxDamageMod(tier, 15);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Staff);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Staff);
                    break;

                case 15:
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                    weaponDefense = GetMaxDamageMod(tier, 20);
                    weaponOffense = GetMaxDamageMod(tier, 20);

                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Sword);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Sword);

                    if (heavyWeaponsType == 20)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.SwordMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.SwordMulti);
                    }
                    break;

                case 21:
                default:
                    weaponDefense  = GetMaxDamageMod(tier, 20);
                    weaponOffense  = GetMaxDamageMod(tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.UA);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.UA);
                    break;
                }
                break;

            case 1:
                // Light Weapons;
                wieldSkillType = Skill.LightWeapons;
                int lightWeaponsType = ThreadSafeRandom.Next(0, 19);
                weaponWeenie = LootTables.LightWeaponsMatrix[lightWeaponsType][eleType];

                switch (lightWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                case 3:
                    weaponDefense  = GetMaxDamageMod(tier, 18);
                    weaponOffense  = GetMaxDamageMod(tier, 22);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Axe);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Axe);
                    break;

                case 4:
                case 5:
                    weaponDefense  = GetMaxDamageMod(tier, 20);
                    weaponOffense  = GetMaxDamageMod(tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.DaggerMulti);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.DaggerMulti);
                    break;

                case 6:
                case 7:
                case 8:
                    weaponDefense  = GetMaxDamageMod(tier, 22);
                    weaponOffense  = GetMaxDamageMod(tier, 18);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Mace);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Mace);
                    break;

                case 9:
                case 10:
                    weaponDefense  = GetMaxDamageMod(tier, 15);
                    weaponOffense  = GetMaxDamageMod(tier, 25);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spear);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Spear);
                    break;

                case 11:
                    weaponDefense  = GetMaxDamageMod(tier, 25);
                    weaponOffense  = GetMaxDamageMod(tier, 15);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Staff);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Staff);
                    break;

                case 12:
                case 13:
                case 14:
                case 15:
                case 16:
                case 17:
                    weaponDefense = GetMaxDamageMod(tier, 20);
                    weaponOffense = GetMaxDamageMod(tier, 20);

                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Sword);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Sword);

                    if (lightWeaponsType == 14)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.SwordMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.SwordMulti);
                    }
                    break;

                case 18:
                default:
                    weaponDefense  = GetMaxDamageMod(tier, 20);
                    weaponOffense  = GetMaxDamageMod(tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.UA);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.UA);
                    break;
                }
                break;

            case 2:
                // Finesse Weapons;
                wieldSkillType = Skill.FinesseWeapons;
                int finesseWeaponsType = ThreadSafeRandom.Next(0, 22);
                weaponWeenie = LootTables.FinesseWeaponsMatrix[finesseWeaponsType][eleType];

                switch (finesseWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                    weaponDefense  = GetMaxDamageMod(tier, 18);
                    weaponOffense  = GetMaxDamageMod(tier, 22);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Axe);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Axe);
                    break;

                case 3:
                case 4:
                case 5:
                    weaponDefense  = GetMaxDamageMod(tier, 20);
                    weaponOffense  = GetMaxDamageMod(tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Dagger);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Dagger);

                    if (finesseWeaponsType == 3 || finesseWeaponsType == 4)
                    {
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.DaggerMulti);
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.DaggerMulti);
                    }
                    break;

                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                    weaponDefense  = GetMaxDamageMod(tier, 22);
                    weaponOffense  = GetMaxDamageMod(tier, 18);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Mace);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Mace);

                    if (finesseWeaponsType == 9)
                    {
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.Jitte);
                    }
                    break;

                case 11:
                case 12:
                    weaponDefense  = GetMaxDamageMod(tier, 15);
                    weaponOffense  = GetMaxDamageMod(tier, 25);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spear);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Spear);
                    break;

                case 13:
                case 14:
                    weaponDefense  = GetMaxDamageMod(tier, 25);
                    weaponOffense  = GetMaxDamageMod(tier, 15);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Staff);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Staff);
                    break;

                case 15:
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                    weaponDefense  = GetMaxDamageMod(tier, 20);
                    weaponOffense  = GetMaxDamageMod(tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Sword);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.Sword);

                    if (finesseWeaponsType == 15)
                    {
                        damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.SwordMulti);
                        damageVariance = GetVariance(wieldSkillType, LootWeaponType.SwordMulti);
                    }
                    break;

                case 21:
                default:
                    weaponDefense  = GetMaxDamageMod(tier, 20);
                    weaponOffense  = GetMaxDamageMod(tier, 20);
                    damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.UA);
                    damageVariance = GetVariance(wieldSkillType, LootWeaponType.UA);
                    break;
                }
                break;

            default:
                // Two handed
                wieldSkillType = Skill.TwoHandedCombat;
                int twoHandedWeaponsType = ThreadSafeRandom.Next(0, 11);
                weaponWeenie = LootTables.TwoHandedWeaponsMatrix[twoHandedWeaponsType][eleType];

                damage         = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Cleaving);
                damageVariance = GetVariance(wieldSkillType, LootWeaponType.TwoHanded);

                switch (twoHandedWeaponsType)
                {
                case 0:
                case 1:
                case 2:
                    weaponDefense = GetMaxDamageMod(tier, 20);
                    weaponOffense = GetMaxDamageMod(tier, 20);
                    break;

                case 3:
                case 4:
                case 5:
                case 6:
                    weaponDefense = GetMaxDamageMod(tier, 22);
                    weaponOffense = GetMaxDamageMod(tier, 18);
                    break;

                case 7:
                    weaponDefense = GetMaxDamageMod(tier, 18);
                    weaponOffense = GetMaxDamageMod(tier, 22);
                    break;

                case 8:
                case 9:
                case 10:
                default:
                    weaponDefense = GetMaxDamageMod(tier, 15);
                    weaponOffense = GetMaxDamageMod(tier, 25);
                    damage        = GetMeleeMaxDamage(wieldSkillType, wieldDiff, LootWeaponType.Spears);
                    break;
                }
                break;
            }

            WorldObject wo = WorldObjectFactory.CreateNewWorldObject((uint)weaponWeenie);

            if (wo == null)
            {
                return(null);
            }

            wo.SetProperty(PropertyInt.AppraisalLongDescDecoration, longDescDecoration);
            wo.SetProperty(PropertyString.LongDesc, wo.GetProperty(PropertyString.Name));

            wo.SetProperty(PropertyInt.GemCount, gemCount);
            wo.SetProperty(PropertyInt.GemType, gemType);
            int materialType = GetMaterialType(wo, tier);

            if (materialType > 0)
            {
                wo.MaterialType = (MaterialType)materialType;
            }
            wo.SetProperty(PropertyInt.ItemWorkmanship, workmanship);

            wo.SetProperty(PropertyInt.Damage, damage);
            wo.SetProperty(PropertyFloat.DamageVariance, damageVariance);

            wo.SetProperty(PropertyFloat.WeaponDefense, weaponDefense);
            wo.SetProperty(PropertyFloat.WeaponOffense, weaponOffense);
            wo.SetProperty(PropertyFloat.WeaponMissileDefense, missileD);
            wo.SetProperty(PropertyFloat.WeaponMagicDefense, magicD);

            if (wieldDiff > 0)
            {
                wo.SetProperty(PropertyInt.WieldDifficulty, wieldDiff);
                wo.SetProperty(PropertyInt.WieldRequirements, (int)wieldRequirments);
                wo.SetProperty(PropertyInt.WieldSkillType, (int)wieldSkillType);
            }
            else
            {
                wo.RemoveProperty(PropertyInt.WieldDifficulty);
                wo.RemoveProperty(PropertyInt.WieldRequirements);
                wo.RemoveProperty(PropertyInt.WieldSkillType);
            }

            if (isMagical)
            {
                wo = AssignMagic(wo, tier);
            }
            else
            {
                wo.RemoveProperty(PropertyInt.ItemManaCost);
                wo.RemoveProperty(PropertyInt.ItemMaxMana);
                wo.RemoveProperty(PropertyInt.ItemCurMana);
                wo.RemoveProperty(PropertyInt.ItemSpellcraft);
                wo.RemoveProperty(PropertyInt.ItemDifficulty);
            }

            double materialMod    = LootTables.getMaterialValueModifier(wo);
            double gemMaterialMod = LootTables.getGemMaterialValueModifier(wo);
            var    value          = GetValue(tier, workmanship, gemMaterialMod, materialMod);

            wo.Value = value;

            wo = RandomizeColor(wo);
            return(wo);
        }
Beispiel #47
0
 /// <summary>
 /// Called when a player kills Creature
 /// </summary>
 public void OnDeath(WorldObject killer)
 {
 }
Beispiel #48
0
 public virtual void ProcessEvent(WorldObject obj, uint eventId)
 {
 }
Beispiel #49
0
 public void SetTarget(WorldObject target)
 {
     this.target = target;
 }
Beispiel #50
0
 public virtual IEnumerable <Gizmo> GetGizmos(WorldObject obj)
 {
     yield break;
 }
 public void MoveRelativeToWorld(WorldObject wo)
 {
     wo.transform.position -= new Vector3(wo.GetRelativeSpeed() * Time.deltaTime, 0);
 }
Beispiel #52
0
 public ArtilleryStrikeArrivalAction_Insectoid(WorldObject worldObject, Map sourceMap)
 {
     this.worldObject = worldObject;
     this.sourceMap   = sourceMap;
 }
Beispiel #53
0
 public void SetTarget(WorldObject worldObject)
 {
     target = worldObject;
 }
Beispiel #54
0
        public void Initialize(ChatMsg chatType, Language language, WorldObject sender, WorldObject receiver, string message, uint achievementId = 0, string channelName = "", Locale locale = Locale.enUS, string addonPrefix = "")
        {
            // Clear everything because same packet can be used multiple times
            Clear();

            SenderGUID.Clear();
            SenderAccountGUID.Clear();
            SenderGuildGUID.Clear();
            PartyGUID.Clear();
            TargetGUID.Clear();
            SenderName = "";
            TargetName = "";
            _ChatFlags = ChatFlags.None;

            SlashCmd  = chatType;
            _Language = language;

            if (sender)
            {
                SetSender(sender, locale);
            }

            if (receiver)
            {
                SetReceiver(receiver, locale);
            }

            SenderVirtualAddress = Global.WorldMgr.GetVirtualRealmAddress();
            TargetVirtualAddress = Global.WorldMgr.GetVirtualRealmAddress();
            AchievementID        = achievementId;
            Channel  = channelName;
            Prefix   = addonPrefix;
            ChatText = message;
        }
Beispiel #55
0
        private static void DropToWorldObjectDo(WorldObject place, List <ThingEntry> things, string from, string text)
        {
            GlobalTargetInfo ti = new GlobalTargetInfo(place);
            var factionPirate   = SessionClientController.Data.FactionPirate;

            if (MainHelper.DebugMode)
            {
                Loger.Log("Mail================================================= {");
            }

            if (place is Settlement && ((Settlement)place).Map != null)
            {
                var map  = ((Settlement)place).Map;
                var cell = GameUtils.GetTradeCell(map);
                ti = new GlobalTargetInfo(cell, map);
                Thing thinXZ;
                foreach (var thing in things)
                {
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("Mail------------------------------------------------- {" + Environment.NewLine
                                  + thing.Data + Environment.NewLine
                                  + "Mail------------------------------------------------- }" + Environment.NewLine);
                    }
                    var thin = GameUtils.PrepareSpawnThingEntry(thing, factionPirate);

                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("Spawn...");
                    }
                    if (thin is Pawn)
                    {
                        var p = thin as Pawn;
                        if (p.Faction != Faction.OfPlayer)
                        {
                            p.health.AddHediff(HediffDefOf.Anesthetic);
                        }
                        GenSpawn.Spawn(p, cell, map);
                    }
                    else
                    {
                        GenDrop.TryDropSpawn(thin, cell, map, ThingPlaceMode.Near, out thinXZ, null);
                    }
                    if (MainHelper.DebugMode)
                    {
                        Loger.Log("Spawn...OK");
                    }
                }
            }
            else if (place is Caravan)
            {
                var pawns = (place as Caravan).PawnsListForReading;
                foreach (var thing in things)
                {
                    /*
                     * thing.SetFaction(factionColonistLoadID, factionPirateLoadID);
                     * var thin = thing.CreateThing(false);
                     */
                    var thin = GameUtils.PrepareSpawnThingEntry(thing, factionPirate);

                    if (thin is Pawn)
                    {
                        (place as Caravan).AddPawn(thin as Pawn, true);
                        GameUtils.SpawnSetupOnCaravan(thin as Pawn);
                    }
                    else
                    {
                        var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, pawns, null);
                        if (p != null)
                        {
                            p.inventory.innerContainer.TryAdd(thin, true);
                        }
                    }
                }
            }

            if (MainHelper.DebugMode)
            {
                Loger.Log("Mail================================================= }");
            }

            Find.LetterStack.ReceiveLetter("OCity_UpdateWorld_Trade".Translate()
                                           , text
                                           , LetterDefOf.PositiveEvent
                                           , ti
                                           , null);
        }
Beispiel #56
0
 public abstract void Initialize(WorldObject firedFrom, AerialVehicleInFlight target, Vector3 source);
Beispiel #57
0
        public void ExecuteEmote(BiotaPropertiesEmote emote, BiotaPropertiesEmoteAction emoteAction, ActionChain actionChain, WorldObject sourceObject = null, WorldObject targetObject = null)
        {
            var player = targetObject as Player;

            switch ((EmoteType)emoteAction.Type)
            {
            case EmoteType.Say:

                actionChain.AddDelaySeconds(emoteAction.Delay);
                actionChain.AddAction(sourceObject, () =>
                {
                    sourceObject.CurrentLandblock.EnqueueBroadcast(sourceObject.Location, new GameMessageCreatureMessage(emoteAction.Message, sourceObject.Name, sourceObject.Guid.Full, ChatMessageType.Emote));
                });
                break;

            case EmoteType.Motion:

                if (emote.Category != (uint)EmoteCategory.Vendor && emote.Style != null)
                {
                    var startingMotion = new UniversalMotion((MotionStance)emote.Style, new MotionItem((MotionCommand)emote.Substyle));
                    var motion         = new UniversalMotion((MotionStance)emote.Style, new MotionItem((MotionCommand)emoteAction.Motion, emoteAction.Extent));

                    if (sourceObject.CurrentMotionState.Stance != startingMotion.Stance)
                    {
                        if (sourceObject.CurrentMotionState.Stance == MotionStance.Invalid)
                        {
                            actionChain.AddDelaySeconds(emoteAction.Delay);
                            actionChain.AddAction(sourceObject, () =>
                            {
                                sourceObject.DoMotion(startingMotion);
                                sourceObject.CurrentMotionState = startingMotion;
                            });
                        }
                    }
                    else
                    {
                        if (sourceObject.CurrentMotionState.Commands.Count > 0 && sourceObject.CurrentMotionState.Commands[0].Motion == startingMotion.Commands[0].Motion)
                        {
                            actionChain.AddDelaySeconds(emoteAction.Delay);
                            actionChain.AddAction(sourceObject, () =>
                            {
                                sourceObject.DoMotion(motion);
                                sourceObject.CurrentMotionState = motion;
                            });
                            actionChain.AddDelaySeconds(DatManager.PortalDat.ReadFromDat <DatLoader.FileTypes.MotionTable>(sourceObject.MotionTableId).GetAnimationLength((MotionCommand)emoteAction.Motion));
                            if (motion.Commands[0].Motion != MotionCommand.Sleeping && motion.Commands[0].Motion != MotionCommand.Sitting)     // this feels like it can be handled better, somehow?
                            {
                                actionChain.AddAction(sourceObject, () =>
                                {
                                    sourceObject.DoMotion(startingMotion);
                                    sourceObject.CurrentMotionState = startingMotion;
                                });
                            }
                        }
                    }
                }
                else
                {
                    var motion = new UniversalMotion(MotionStance.Standing, new MotionItem((MotionCommand)emoteAction.Motion, emoteAction.Extent));

                    actionChain.AddDelaySeconds(emoteAction.Delay);
                    actionChain.AddAction(sourceObject, () =>
                    {
                        sourceObject.DoMotion(motion);
                        sourceObject.CurrentMotionState = motion;
                    });
                }

                break;

            case EmoteType.Tell:
                actionChain.AddDelaySeconds(emoteAction.Delay);
                actionChain.AddAction(sourceObject, () =>
                {
                    player.Session.Network.EnqueueSend(new GameMessageHearDirectSpeech(sourceObject, emoteAction.Message, player, ChatMessageType.Tell));
                });
                break;

            case EmoteType.TurnToTarget:
                var creature = sourceObject is Creature ? (Creature)sourceObject : null;
                actionChain.AddDelaySeconds(creature.Rotate(player));
                break;

            case EmoteType.AwardXP:
                actionChain.AddAction(sourceObject, () =>
                {
                    if (player != null)
                    {
                        player.EarnXP((long)emoteAction.Amount64);
                        player.Session.Network.EnqueueSend(new GameMessageSystemChat("You've earned " + emoteAction.Amount64 + " experience.", ChatMessageType.System));
                    }
                });
                break;

            case EmoteType.Give:
                actionChain.AddAction(sourceObject, () =>
                {
                    if (player != null)
                    {
                        uint weenie      = (uint)emoteAction.WeenieClassId;
                        WorldObject item = WorldObjectFactory.CreateNewWorldObject(weenie);
                        if (emoteAction.WeenieClassId != null)
                        {
                            if (emoteAction.StackSize > 1)
                            {
                                item.StackSize = (ushort)emoteAction.StackSize;
                                player.Session.Network.EnqueueSend(new GameMessageSystemChat(WorldObject.Name + " gives you " + emoteAction.StackSize + " " + item.Name + ".", ChatMessageType.System));
                            }
                            else
                            {
                                player.Session.Network.EnqueueSend(new GameMessageSystemChat(WorldObject.Name + " gives you " + item.Name + ".", ChatMessageType.System));
                            }
                            var success = player.TryCreateInInventoryWithNetworking(item);
                        }
                    }
                });
                break;

            default:
                log.Debug($"EmoteManager.Execute - Encountered Unhandled EmoteType {(EmoteType)emoteAction.Type} for {sourceObject.Name} ({sourceObject.WeenieClassId})");
                break;
            }
        }
Beispiel #58
0
        public override void Setup(Material mat, ref RenderOperation op)
        {
            if (mode == RenderMode.Depth)
            {
                Matrix lightPrjTrans;
                Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans);
                shdVtxShader.SetValue("mvp", ref lightPrjTrans);
            }
            else if (mode == RenderMode.DeferredNormal)
            {
                Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix;
                Matrix mvp       = worldView * EffectParams.CurrentCamera.ProjectionMatrix;
                nrmGenVShader.SetValue("mvp", ref mvp);
                nrmGenVShader.SetValue("worldView", ref worldView);

                if (!stateSetted)
                {
                    ShaderSamplerState state = new ShaderSamplerState();
                    state.AddressU      = TextureAddressMode.Wrap;
                    state.AddressV      = TextureAddressMode.Wrap;
                    state.AddressW      = TextureAddressMode.Wrap;
                    state.MinFilter     = TextureFilter.Linear;
                    state.MagFilter     = TextureFilter.Linear;
                    state.MipFilter     = TextureFilter.Linear;
                    state.MaxAnisotropy = 8;
                    state.MipMapLODBias = 0;

                    nrmGenPShader.SetSamplerState("texDif", ref state);

                    ResourceHandle <Texture> clrTex = mat.GetTexture(0);
                    if (clrTex == null)
                    {
                        nrmGenPShader.SetTexture("texDif", noTexture);
                    }
                    else
                    {
                        nrmGenPShader.SetTexture("texDif", clrTex);
                    }
                    stateSetted = true;
                }
            }
            else
            {
                Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix;

                vtxShader.SetValue("mvp", ref mvp);
                vtxShader.SetValue("world", ref op.Transformation);

                Matrix lightPrjTrans;
                Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans);

                vtxShader.SetValue("smTrans", lightPrjTrans);


                WorldObject wo = op.Sender as WorldObject;
                if (wo != null)
                {
                    pixShader.SetValue("visiblity", wo.Visiblity);
                }
                else
                {
                    pixShader.SetValue("visiblity", 1.0f);
                }


                if (!stateSetted)
                {
                    ShaderSamplerState state = new ShaderSamplerState();
                    state.AddressU      = TextureAddressMode.Wrap;
                    state.AddressV      = TextureAddressMode.Wrap;
                    state.AddressW      = TextureAddressMode.Wrap;
                    state.MinFilter     = TextureFilter.Anisotropic;
                    state.MagFilter     = TextureFilter.Anisotropic;
                    state.MipFilter     = TextureFilter.Linear;
                    state.MaxAnisotropy = 8;
                    state.MipMapLODBias = 0;


                    pixShader.SetValue("k_a", mat.Ambient);
                    pixShader.SetValue("k_d", mat.Diffuse);
                    pixShader.SetValue("k_s", mat.Specular);
                    pixShader.SetValue("k_e", mat.Emissive);
                    pixShader.SetValue("k_power", mat.Power);



                    pixShader.SetSamplerState("texDif", ref state);

                    ResourceHandle <Texture> clrTex = mat.GetTexture(0);
                    if (clrTex == null)
                    {
                        pixShader.SetTexture("texDif", noTexture);
                    }
                    else
                    {
                        pixShader.SetTexture("texDif", clrTex);
                    }

                    if (mat.IsVegetation)
                    {
                        vtxShader.SetValue("isVegetation", new Vector4(100, 100, 100, 100));
                    }
                    else
                    {
                        vtxShader.SetValue("isVegetation", new Vector4());
                    }
                    stateSetted = true;
                }
            }
        }
Beispiel #59
0
 public override void OnReceiveRemote() => WorldObject.SetSlot(Value, _playAudio);
Beispiel #60
0
 public EmoteManager(WorldObject worldObject)
 {
     WorldObject = worldObject;
 }