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(); } }
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(); } }
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; }
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(); } } }
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); //} }
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); }
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>(); }
public static void SaveWorldObject(JsonWriter writer, WorldObject worldObject) { if (writer == null || worldObject == null) return; writer.WriteStartObject(); worldObject.SaveDetails(writer); writer.WriteEndObject(); }
public ItemInfoIdentArgs(WorldObject identifiedItem, bool dontShowIfItemHasNoRule = false, bool dontShowIfIsSalvageRule = false) { IdentifiedItem = identifiedItem; DontShowIfItemHasNoRule = dontShowIfItemHasNoRule; DontShowIfIsSalvageRule = dontShowIfIsSalvageRule; }
public EBoundingBox(EBoundingBox copy, WorldObject holder) : base(copy, holder) { Type = copy.Type; Events = new List<ObjectEvent>(copy.Events); EventsToRemove = new Queue<ObjectEvent>(); }
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); }
/*** 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); }
public override void DepositWorldObject(WorldObject worldObject) { if (worldObject.ElementType == MapElementType.Beer) { } //PrintDepositedWorldObjects(); base.DepositWorldObject(worldObject); }
/// <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); }
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); } }
/// <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; }
/// <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; }
public override void DepositWorldObject(WorldObject worldObject) { if (worldObject.ElementType == MapElementType.Coal) { _burnTime += _oneCoalBurnTime; _requestedCoal--; } else base.DepositWorldObject(worldObject); }
// 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); }
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) { }
// Add a world object public void AddWorldObjectToScene(WorldObject worldObj) { worldObj.objectID = ++totalObjects; allWorldObjects.Add(worldObj); ViewWorldObjectsWindow.instance.UpdateWorldObjectsList(); }
private void Awake() { worldObject = GetComponent <WorldObject>(); unit = GetComponent <Unit>(); paramManager = GetComponent <ParamManager>(); }
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); }
public CombatLogSender(WorldObject src, CombatLogServerPacket msg, float dist) { i_source = src; i_message = msg; i_distSq = dist * dist; }
// 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); } } }
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); }
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); }
/// <summary> /// Called when a player kills Creature /// </summary> public void OnDeath(WorldObject killer) { }
public virtual void ProcessEvent(WorldObject obj, uint eventId) { }
public void SetTarget(WorldObject target) { this.target = target; }
public virtual IEnumerable <Gizmo> GetGizmos(WorldObject obj) { yield break; }
public void MoveRelativeToWorld(WorldObject wo) { wo.transform.position -= new Vector3(wo.GetRelativeSpeed() * Time.deltaTime, 0); }
public ArtilleryStrikeArrivalAction_Insectoid(WorldObject worldObject, Map sourceMap) { this.worldObject = worldObject; this.sourceMap = sourceMap; }
public void SetTarget(WorldObject worldObject) { target = worldObject; }
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; }
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); }
public abstract void Initialize(WorldObject firedFrom, AerialVehicleInFlight target, Vector3 source);
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; } }
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; } } }
public override void OnReceiveRemote() => WorldObject.SetSlot(Value, _playAudio);
public EmoteManager(WorldObject worldObject) { WorldObject = worldObject; }