/// <summary> /// /// </summary> /// <param name="texturePool"></param> /// <param name="mobInstance"></param> /// <param name="device"></param> /// <param name="usedProps"></param> /// <returns></returns> public static MobItem CreateMobFromProperty(TexturePool texturePool, MobInstance mobInstance, GraphicsDevice device, ref List <WzObject> usedProps) { MobInfo mobInfo = (MobInfo)mobInstance.BaseInfo; WzImage source = mobInfo.LinkedWzImage; List <IDXObject> frames = new List <IDXObject>(); // All frames "stand", "speak" "blink" "hair", "angry", "wink" etc foreach (WzImageProperty childProperty in source.WzProperties) { if (childProperty is WzSubProperty mobStateProperty) // issue with 867119250, Eluna map mobs { switch (mobStateProperty.Name) { case "info": // info/speak/0 WzStringProperty { break; } default: { frames.AddRange(LoadFrames(texturePool, mobStateProperty, mobInstance.X, mobInstance.Y, device, ref usedProps)); break; } } } } return(new MobItem(mobInstance, frames)); }
public void LoadInfo(Event eventController, MobInfo info) { m_info = info; m_eventController = eventController; Sprite[] textures = Resources.LoadAll <Sprite>("images/mobs"); string sprite = m_info.sprite; foreach (Sprite s in textures) { if (s.name == sprite) { m_sprite.sprite = s; break; } } m_sprite.color = info.color; m_health = m_totalHealth = info.health; m_hasHealth = info.hasHealth; if (!m_hasHealth) { m_health = m_totalHealth = 1; healthBarBG.renderer.enabled = false; healthBarFG.renderer.enabled = false; } }
private static bool _LoadDataBase(string tablePath, ref Dictionary <int, MobInfo> Info) { Info.Clear(); TextAsset datas = Resources.Load <TextAsset>(tablePath); if (datas != null) { string[] lines = datas.text.Split('\n'); for (int i = 1; i < lines.Length - 1; i++) { string[] mobInfo = lines[i].Split(','); MobInfo data = new MobInfo(); data.SetID(int.Parse(mobInfo[0])); data.SetHP(float.Parse(mobInfo[1])); data.SetProbeLength(float.Parse(mobInfo[2])); data.SetSight(float.Parse(mobInfo[3])); data.SetRadius(float.Parse(mobInfo[4])); data.SetVisionLength(float.Parse(mobInfo[5])); data.SetAttackRange(float.Parse(mobInfo[6])); data.SetAttackDamage(float.Parse(mobInfo[7])); data.SetMoney(float.Parse(mobInfo[8])); data.SetExp(float.Parse(mobInfo[9])); Info.Add(data.m_ID, data); } return(true); } return(false); }
public override void CheckCondition(MobInfo data) { if (m_fCurrentTime > m_fIdleTime) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_WanderIdle); } }
private static void AnswerOnNpcQuestion(ZoneCharacter character, byte answer) { NPC npc = (character.Question.Object as NPC); MobInfo mob = DataProvider.Instance.GetMobInfo(npc.ID); string NpcFunction; DataProvider.Instance.ShineNpcTable.TryGetValue(mob.Name + "\t" + npc.Map.MapInfo.ShortName + "\t" + npc.Position.X + "\t" + npc.Position.Y, out NpcFunction); if (NpcFunction != null) { switch (answer) { case 0: break; case 1: if (NpcFunction.Split('\t')[1] == "1" && NpcFunction.Split('\t')[2] == "Merchant" && NpcFunction.Split('\t')[3] == "SoulStone") { SendSellHPSP(character); } else if (NpcFunction.Split('\t')[1] == "1" && NpcFunction.Split('\t')[2] == "Merchant" && NpcFunction.Split('\t')[3] == "Item") { SendSellItems(character, mob.Name); } break; default: Log.WriteLine(LogLevel.Warn, "Invalid gate question response."); break; } } else { Log.WriteLine(LogLevel.Error, "NpcHandler :: Can not find NpcAction for {0} on M: {1}", mob.Name, npc.Map.MapInfo.FullName); } }
public static void SearchPlayer(MobInfo data) { data.m_Player = null; List <Player> pList = InGamePlayerManager.Instance.Players; if (pList != null && pList.Count > 0) { float minDist = float.MaxValue; for (int i = 0; i < pList.Count; i++) { float sqrDist = (pList[i].transform.position - data.m_Go.transform.position).sqrMagnitude; if (pList[i].IsDead) { continue; } if (sqrDist < minDist) { minDist = sqrDist; data.m_Player = pList[i]; } } } return; }
public override void CheckCondition(MobInfo data) { if (m_fCurrentTime > m_fIdleTime && SteeringBehaviours.CreatRandomTarget(data) == true) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Wander); } if (data.m_Player != null && data.m_Player.IsDead == false) { float Dist = (data.m_Player.transform.position - data.m_Go.transform.position).magnitude; if (Dist < data.m_fPatrolVisionLength) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Flee); } AnimatorStateInfo info = data.m_AnimationController.Animator.GetCurrentAnimatorStateInfo(0); if (info.IsName("WanderIdle")) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_ChaseToRemoteAttack); if (info.normalizedTime > m_AnimatorLeaveTime) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Chase); } } } }
public override void CheckCondition(MobInfo data) { if (Vector3.Distance(data.m_vTarget, data.m_Go.transform.position) < 0.1f) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_NoPlayerWanderIdle); } if (data.m_Player != null && data.m_Player.IsDead == false) { AnimatorStateInfo info = data.m_AnimationController.Animator.GetCurrentAnimatorStateInfo(0); if (info.IsName("WanderIdle2")) { if (info.normalizedTime > m_AnimatorLeaveTime) { if ((data.m_Player.transform.position - data.m_Go.transform.position).magnitude > data.m_fAttackRange) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Chase); } else { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Dodge); } } } } }
private void lifeListBox_SelectedValueChanged(object sender, EventArgs e) { lifePictureBox.Image = new Bitmap(1, 1); if (lifeListBox.SelectedItem == null) { return; } if (reactorRButton.Checked) { ReactorInfo info = Program.InfoManager.Reactors[(string)lifeListBox.SelectedItem]; lifePictureBox.Image = info.Image; SetHeldInfo(info, ItemTypes.Reactors); } else if (npcRButton.Checked) { string id = ((string)lifeListBox.SelectedItem).Substring(0, ((string)lifeListBox.SelectedItem).IndexOf(" - ")); NpcInfo info = WzInfoTools.GetNpcInfoById(id); lifePictureBox.Image = info.Image; SetHeldInfo(info, ItemTypes.NPCs); } else { string id = ((string)lifeListBox.SelectedItem).Substring(0, ((string)lifeListBox.SelectedItem).IndexOf(" - ")); MobInfo info = WzInfoTools.GetMobInfoById(id); lifePictureBox.Image = info.Image; SetHeldInfo(info, ItemTypes.Mobs); } }
public override void CheckCondition(MobInfo data) { if (m_fCurrentTime > m_fIdleTime && SteeringBehaviours.CreatRandomTarget(data) == true) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_NoPlayerWander); } if (data.m_Player != null && data.m_Player.IsDead == false) { AnimatorStateInfo info = data.m_AnimationController.Animator.GetCurrentAnimatorStateInfo(0); if (info.IsName("WanderIdle2")) { if (info.normalizedTime > m_AnimatorLeaveTime) { if ((data.m_Player.transform.position - data.m_Go.transform.position).magnitude > data.m_fAttackRange) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Chase); } else { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Dodge); } } } } }
private async void Init() { await MobInfo.Load(new Progress <int>()); if (!isNewFile) { await QuestDialog.Load(new Progress <int>()); foreach (DataRow row in QuestDialog.Rows) { if (QuestStrings.ContainsKey(Convert.ToUInt16(row.ItemArray[0]))) { continue; } QuestStrings.Add(Convert.ToUInt16(row.ItemArray[0]), row.ItemArray[1].ToString()); } } foreach (DataRow row in MobInfo.Rows) { if (MobRows.ContainsKey(Convert.ToUInt16(row.ItemArray[0]))) { continue; } MobRows.Add(Convert.ToUInt16(row.ItemArray[0]), row.ItemArray); } }
static public bool CollisionAvoided(MobInfo data) { Vector3 curPos = data.m_Go.transform.position; Vector3 tarDir = data.m_vTarget - curPos; float length = data.m_fProbeLength; RaycastHit rh; if (Physics.Raycast(curPos, tarDir, out rh, length, 1 << LayerMask.NameToLayer("Terrain") | 1 << LayerMask.NameToLayer("Enemies"))) { Debug.Log("Obsticle!!!!"); float distance = tarDir.magnitude; float ratio = distance / length; if (ratio > 1) { ratio = 1; } data.m_fMoveForce = ratio - 1; tarDir.Normalize(); Vector3 vTempTurnForward = tarDir + rh.normal; vTempTurnForward.Normalize(); data.m_fTempTurnForce = Vector3.Dot(vTempTurnForward, tarDir); return(true); } return(false); }
public void NodeActionComputeTest() { var game = new GameInstance(3); var ability = new AbilityInfo(3, 1, 1, 0); var abilityId = game.AddAbilityWithInfo(ability); var abilities1 = new List <int>(); var abilities2 = new List <int> { abilityId }; var info1 = new MobInfo(TeamColor.Red, 5, 1, 0, abilities1); var info2 = new MobInfo(TeamColor.Blue, 5, 1, 1, abilities2); var m1 = game.AddMobWithInfo(info1); var m2 = game.AddMobWithInfo(info2); game.PlaceMob(m1, new AxialCoord(1, 1)); game.PlaceMob(m2, new AxialCoord(-1, -1)); game.PrepareEverything(); Assert.IsTrue(game.CurrentMob.HasValue); Assert.AreEqual(m1, game.CurrentMob.Value); var firstNode = new UctNode(0, 0, UctAction.NullAction(), game); firstNode.PrecomputePossibleActions(true, true); Assert.AreEqual(3, firstNode.PossibleActions.Count); }
public void StateDeepCopyTest() { var game = new GameInstance(3); var ability = new AbilityInfo(3, 1, 1, 0); var abilityId = game.AddAbilityWithInfo(ability); var abilities1 = new List <int>(); var abilities2 = new List <int> { abilityId }; var info1 = new MobInfo(TeamColor.Red, 5, 1, 0, abilities1); var info2 = new MobInfo(TeamColor.Blue, 5, 1, 1, abilities2); var m1 = game.AddMobWithInfo(info1); var m2 = game.AddMobWithInfo(info2); game.PrepareEverything(); var copy = game.CopyStateOnly(); TestHelpers.GameInstancesEqual(game, copy); var copy2 = copy.CopyStateOnly(); ActionEvaluator.F(copy2, UctAction.AbilityUseAction(abilityId, m1, m2)); TestHelpers.GameInstancesEqual(game, copy); TestHelpers.MobManagersEqual(game.MobManager, copy2.MobManager); TestHelpers.MapsEqual(game.Map, copy2.Map); }
public void UnloadMob(int ID, MobInfo data) { ObjectPool.m_Instance.UnLoadObjectToPool(ID, data.m_Go); switch (ID) { case 3100: AddTotalKill(); m_FishCount--; break; case 3200: AddTotalKill(); m_PatrolCount--; break; case 3300: AddTotalKill(); m_FishVariantCount--; break; case 3400: AddTotalKill(); m_TankCount--; break; } }
public override void CheckCondition(MobInfo data) { if ((data.m_Player.transform.position - data.m_Go.transform.position).magnitude < data.m_fAttackRange * 2.0f) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_RemoteAttack); } }
public override void DoBeforeLeave(MobInfo data) { data.navMeshAgent.speed *= 0.5f; data.m_AnimationController.SetAnimator(m_StateID, false); m_Animator.SetTrigger("endTrigger"); GameObject.Destroy(sound.gameObject); ObjectPool.m_Instance.UnLoadObjectToPool(3210, GO); }
public override void DoBeforeEnter(MobInfo data) { attackCount = 0; effectCount = 0; count = 0; m_AnimatorLeaveTime = Random.Range(0.7f, 1.0f); data.navMeshAgent.enabled = false; }
//#Spawn monster public void spawnMobFromClient(int mobId, int amount) { MobInfo mobInfo = new MobInfo(); mobInfo.mobId = mobId; mobInfo.amount = amount; con.Send(PacketTypes.MONSTER_SPAWN, mobInfo); }
public override void DoBeforeLeave(MobInfo data) { m_fCurrentTime = 0; bulletIndex = 0; bIsReady = false; bCompleteFire = false; data.m_MobAimLine.CloseAimLine(); }
private void LoadMobs() { try { MobsByID = new Dictionary <ushort, MobInfo>(); MobsByName = new Dictionary <string, MobInfo>(); DataTable data_mobinfo = null; DataTable data_MobInfoServer = null; using (DatabaseClient dbClient = Program.DatabaseManager.GetClient()) { data_mobinfo = dbClient.ReadDataTable("SELECT *FROM data_mobinfo"); data_MobInfoServer = dbClient.ReadDataTable("SELECT *FROM data_MobInfoServer"); } if (data_mobinfo != null) { foreach (DataRow row in data_mobinfo.Rows) { MobInfo info = MobInfo.Load(row); if (MobsByID.ContainsKey(info.ID) || MobsByName.ContainsKey(info.Name)) { Log.WriteLine(LogLevel.Warn, "Duplicate mob ID found in MobInfo.shn: {0}.", info.ID); continue; } MobsByID.Add(info.ID, info); MobsByName.Add(info.Name, info); } } MobData = new Dictionary <string, MobInfoServer>(); if (data_MobInfoServer != null) { foreach (DataRow row in data_MobInfoServer.Rows) { MobInfoServer info = MobInfoServer.Load(row); if (MobData.ContainsKey(info.InxName)) { Log.WriteLine(LogLevel.Warn, "Duplicate mob ID found in MobInfoServer.shn: {0}.", info.InxName); continue; } // Program.DatabaseManager.GetClient().ExecuteQuery("UPDATE Vendors SET NPCID='" + info.ID + "' WHERE NPCID='" + info.InxName + "'"); MobData.Add(info.InxName, info); } /* foreach (string mobs in MobsByName.Keys)//check mobdata this is for database devs * { * if(!MobData.ContainsKey(mobs)) * { * Console.WriteLine(mobs); * } * }*/ } Log.WriteLine(LogLevel.Info, "Loaded {0} mobs.", MobsByID.Count); } catch (Exception ex) { Log.WriteLine(LogLevel.Exception, "Error loading MobInfo {0}", ex.Message); } }
public override void Do(MobInfo data) { data.navMeshAgent.enabled = true; data.m_vTarget = data.m_Player.transform.position; SteeringBehaviours.NavMove(data); Vector3 v = (SteeringBehaviours.GroupBehavior(data, 60, true) + SteeringBehaviours.GroupBehavior(data, 60, false)) * 2f * Time.deltaTime; data.m_Go.transform.position += v; }
static public void NavMove(MobInfo data) { if (data.navMeshAgent.SetDestination(data.m_vTarget) == false) { data.m_FSMSystem.PerformGlobalTransition(eFSMTransition.Go_Dead); } data.navMeshAgent.SetDestination(data.m_vTarget); }
public override float WeightMob(MobInfo info, SpawnChance chance) { if (info.Type == typeof(Bee) || info.Type == typeof(Explobee)) { return(info.Chance * 2); } return(base.WeightMob(info, chance)); }
public override void CheckCondition(MobInfo data) { float Dist = (data.m_Player.transform.position - data.m_Go.transform.position).magnitude; if (Dist > data.m_fPatrolVisionLength * 1.5f || Physics.Linecast(data.m_Go.transform.position, data.m_Go.transform.position + data.m_Go.transform.forward * 2f, 1 << LayerMask.NameToLayer("Obstcale"))) { data.m_FSMSystem.PerformTransition(eFSMTransition.Go_Attack); } }
public override void DoBeforeEnter(MobInfo data) { m_AnimatorLeaveTime = Random.Range(0.7f, 1.0f); data.navMeshAgent.enabled = false; data.m_vTarget = new Vector3(0, 0, 0); m_fCurrentTime = 0.0f; m_fIdleTime = Random.Range(1.0f, 3.0f); data.m_AnimationController.SetAnimator(m_StateID, true); }
public virtual void Copy(MobInfo mobInfo) { base.Copy(mobInfo); level = mobInfo.level; nPoint = mobInfo.nPoint; collisionRadius = mobInfo.collisionRadius; }
public override void DoBeforeEnter(MobInfo data) { Count = 0; AttackCount = 0; m_fCurrentTime = 0; bIsReady = false; bFire = false; m_AnimatorLeaveTime = Random.Range(0.7f, 1.0f); data.navMeshAgent.enabled = false; }
public bool SetMobInfo(MobInfo mobInfo) { m_MobInfo = mobInfo; // Change according to material if (m_pLinkActor != null) { } return(true); }
public override void Do(MobInfo data) { vec = data.m_Go.transform.forward; vec += data.m_Go.transform.position; vec.y += 0.5f; GO.transform.position = vec; data.m_vTarget = data.m_Go.transform.position + (data.m_Go.transform.position - data.m_Player.transform.position).normalized; data.m_vTarget.y = data.m_Go.transform.position.y; SteeringBehaviours.NavMove(data); }
public MobManager(string loadSource) { m_mobs = new List<MobInfo>(); TextAsset json = (TextAsset)Resources.Load(loadSource, typeof(TextAsset)); if(!json) { Debug.LogError("Couldn't find: " + loadSource); } string content = json.text; Debug.Log ("Created mob manager"); JSONNode cards = JSON.Parse(content); int mobCount = cards["mobCount"].AsInt; Debug.Log ("There are " + mobCount + " mobs"); for(int i = 0; i < mobCount; i++) { MobInfo mobInfo = new MobInfo(cards["mobs"][i]); m_mobs.Add(mobInfo); } Debug.Log("Loaded " + m_mobs.Count + " mobs"); }
public void LoadInfo(Event eventController, MobInfo info) { m_info = info; m_eventController = eventController; Sprite[] textures = Resources.LoadAll<Sprite>("images/mobs"); string sprite = m_info.sprite; foreach(Sprite s in textures) { if(s.name == sprite) { m_sprite.sprite = s; break; } } m_sprite.color = info.color; m_health = m_totalHealth = info.health; m_hasHealth = info.hasHealth; if(!m_hasHealth) { m_health = m_totalHealth = 1; healthBarBG.renderer.enabled = false; healthBarFG.renderer.enabled = false; } }
private Mob CreateMob(MobInfo info, Vector3 position) { if(m_info.mobs.Count <= 0 || m_info.isInn || m_info.isStore) return null; GameObject element = Instantiate(mobPrefab, position, Quaternion.identity) as GameObject; Mob mob = element.GetComponent<Mob>(); mob.LoadInfo(this, info); return mob; }