public bool InsertMonsterSpawn(MonsterSpawn monsterSpawn) { int rowsAffected = ExecuteNonQuery(SQL_INSERT_MONSTER_SPAWN, command => { AddParameter(command, "@monster_id", monsterSpawn.monsterId); AddParameter(command, "@model_id", monsterSpawn.modelId); AddParameter(command, "@level", monsterSpawn.level); AddParameter(command, "@name", monsterSpawn.name); AddParameter(command, "@title", monsterSpawn.title); AddParameter(command, "@map_id", monsterSpawn.mapId); AddParameter(command, "@x", monsterSpawn.x); AddParameter(command, "@y", monsterSpawn.y); AddParameter(command, "@z", monsterSpawn.z); AddParameter(command, "@active", monsterSpawn.active); AddParameter(command, "@heading", monsterSpawn.heading); AddParameter(command, "@size", monsterSpawn.size); AddParameter(command, "@created", monsterSpawn.created); AddParameter(command, "@updated", monsterSpawn.updated); }, out long autoIncrement); if (rowsAffected <= NO_ROWS_AFFECTED || autoIncrement <= NO_AUTO_INCREMENT) { return(false); } monsterSpawn.id = (int)autoIncrement; return(true); }
public bool InsertMonsterSpawn(MonsterSpawn monsterSpawn) { int rowsAffected = ExecuteNonQuery(SqlInsertMonsterSpawn, command => { AddParameter(command, "@monster_id", monsterSpawn.MonsterId); AddParameter(command, "@model_id", monsterSpawn.ModelId); AddParameter(command, "@level", monsterSpawn.Level); AddParameter(command, "@name", monsterSpawn.Name); AddParameter(command, "@title", monsterSpawn.Title); AddParameter(command, "@map_id", monsterSpawn.MapId); AddParameter(command, "@x", monsterSpawn.X); AddParameter(command, "@y", monsterSpawn.Y); AddParameter(command, "@z", monsterSpawn.Z); AddParameter(command, "@active", monsterSpawn.Active); AddParameter(command, "@heading", monsterSpawn.Heading); AddParameter(command, "@size", monsterSpawn.Size); AddParameter(command, "@created", monsterSpawn.Created); AddParameter(command, "@updated", monsterSpawn.Updated); }, out long autoIncrement); if (rowsAffected <= NoRowsAffected || autoIncrement <= NoAutoIncrement) { return(false); } monsterSpawn.Id = (int)autoIncrement; return(true); }
public MonsterTask(NecServer server, MonsterSpawn monster) { this.monster = monster; this.server = server; monsterFreeze = false; monsterActive = true; monsterMoving = false; _casting = false; _spawnMonster = true; monsterHome = null; this.monster.currentCoordIndex = 1; _pathingTick = 100; _agroTick = 200; _updateTime = _pathingTick; _agroMoveTime = 0; _agroTickMove = new MonsterTick(); _waitTime = 2000; _currentWait = 0; _moveTime = _updateTime; _monsterWaiting = true; agroRange = 1000; _agroCheckTime = -1; _agroDetectAngle = (float)Math.Cos(Math.PI / 1.9); _agroMoveAngle = (float)Math.Cos(Math.PI / 4); _castState = 0; _respawnTime = 10000; _currentSkill = 0; _skillInstanceId = 0; _map = this.server.maps.Get(this.monster.mapId); _currentDest = new Vector3(); }
public MonsterTask(NecServer server, MonsterSpawn monster) { _monster = monster; _server = server; monsterFreeze = false; monsterActive = true; monsterMoving = false; casting = false; spawnMonster = true; monsterHome = null; _monster.CurrentCoordIndex = 1; pathingTick = 100; agroTick = 200; updateTime = pathingTick; agroMoveTime = 0; agroTickMove = new MonsterTick(); waitTime = 2000; currentWait = 0; moveTime = updateTime; monsterWaiting = true; agroRange = 1000; agroCheckTime = -1; agroDetectAngle = (float)Math.Cos(Math.PI / 1.9); agroMoveAngle = (float)Math.Cos(Math.PI / 4); CastState = 0; respawnTime = 10000; currentSkill = 0; skillInstanceId = 0; Map = _server.Maps.Get(_monster.MapId); currentDest = new Vector3(); }
/// <summary> /// Registers the spawns. /// </summary> /// <param name="spawnSources">The spawn sources.</param> public virtual void RegisterSpawns(IEnumerable <SpawnSource> spawnSources) { foreach (SpawnSource spawnSource in spawnSources) { foreach (MonsterSpawnSettings monsterSettings in spawnSource.Spawns.OfType <MonsterSpawnSettings>()) { ITile tile = _tileService.GetTileByPosition(monsterSettings.AbsolutePosition); // TODO: This should throw an exception because it means it's an invalid position if (tile == null) { continue; } MonsterSpawn monsterSpawn = new MonsterSpawn(); monsterSpawn.Creature = monsterSettings.Monster; monsterSpawn.Direction = Direction.South; monsterSpawn.DrunkCondition = null; monsterSpawn.ExhaustCondition = null; monsterSpawn.Health = new Health { Current = monsterSettings.Monster.MaxHealth, Maximum = monsterSettings.Monster.MaxHealth }; monsterSpawn.Id = _creatureSpawnService.TotalCount; monsterSpawn.IsInvisible = false; // TODO: Implement creatures that use existing outfits/mounts monsterSpawn.IsRiding = false; // TODO: Creatures and NPC's don't have a level monsterSpawn.Level = new Level { Current = 1, Experience = 1, NextLevelExperience = 0 }; monsterSpawn.LightInfo = _lightInfo; monsterSpawn.Monster = monsterSettings.Monster; monsterSpawn.Mount = null; monsterSpawn.Outfit = null; monsterSpawn.PoisonCondition = null; monsterSpawn.RegenerationConditions = null; monsterSpawn.Skull = new Skull { Time = TimeSpan.Zero, Type = SkullType.None }; monsterSpawn.Speed = monsterSettings.Monster.BaseSpeed; monsterSpawn.StackPosition = 1; monsterSpawn.Tile = tile; monsterSpawn.WarIcon = WarIcon.None; monsterSpawn.Outfit = monsterSpawn.Monster.Outfit; monsterSpawn.Mount = monsterSpawn.Monster.Mount; _creatureSpawnService.RegisterCreature(monsterSpawn); _tileService.RegisterCreature(monsterSpawn); } } }
public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { MonsterSpawn monsterSpawn = Server.Instances.CreateInstance <MonsterSpawn>(); if (!int.TryParse(command[0], out int monsterId)) { responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[0]}")); return; } if (!Server.SettingRepository.Monster.TryGetValue(monsterId, out MonsterSetting monsterSetting)) { responses.Add(ChatResponse.CommandError(client, $"Invalid MonsterId: {monsterId}")); return; } if (!int.TryParse(command[1], out int modelId)) { responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[1]}")); return; } if (!Server.SettingRepository.ModelCommon.TryGetValue(modelId, out ModelCommonSetting modelSetting)) { responses.Add(ChatResponse.CommandError(client, $"Invalid ModelId: {modelId}")); return; } Logger.Debug($"modelSetting.Radius [{modelSetting.Radius}]"); monsterSpawn.MonsterId = monsterSetting.Id; monsterSpawn.Name = monsterSetting.Name; monsterSpawn.Title = monsterSetting.Title; monsterSpawn.Level = (byte)monsterSetting.Level; monsterSpawn.ModelId = modelSetting.Id; monsterSpawn.Size = (short)(modelSetting.Height / 2); monsterSpawn.Radius = (short)modelSetting.Radius; monsterSpawn.MapId = client.Character.MapId; monsterSpawn.X = client.Character.X; monsterSpawn.Y = client.Character.Y; monsterSpawn.Z = client.Character.Z; monsterSpawn.Heading = client.Character.Heading; monsterSpawn.Hp.setMax(100); monsterSpawn.Hp.setCurrent(100); if (!Server.Database.InsertMonsterSpawn(monsterSpawn)) { responses.Add(ChatResponse.CommandError(client, "MonsterSpawn could not be saved to database")); return; } RecvDataNotifyMonsterData monsterData = new RecvDataNotifyMonsterData(monsterSpawn); Router.Send(client.Map, monsterData); }
public void RemoveMonsterSpawn(MonsterSpawn spawn) { this.m_monsterSpawns.Remove(spawn); foreach (SubArea current in this.SubAreas) { current.RemoveMonsterSpawn(spawn); } }
public void AddMonsterSpawn(MonsterSpawn spawn) { this.m_monsterSpawns.Add(spawn); foreach (Map current in this.Maps) { current.AddMonsterSpawn(spawn); } }
public void RemoveMonsterSpawn(MonsterSpawn spawn) { this.m_monsterSpawns.Remove(spawn); foreach (Map current in this.Maps) { current.RemoveMonsterSpawn(spawn); } }
public void AddMonsterSpawn(MonsterSpawn spawn) { this.m_monsterSpawns.Add(spawn); foreach (SubArea current in this.SubAreas) { current.AddMonsterSpawn(spawn); } }
public void RemoveMonsterSpawn(MonsterSpawn spawn) { m_monsterSpawns.Remove(spawn); foreach (var subArea in SubAreas) { subArea.RemoveMonsterSpawn(spawn); } }
public void AddMonsterSpawn(MonsterSpawn spawn) { m_monsterSpawns.Add(spawn); foreach (var map in Maps.Where(map => map.Outdoor && !map.Record.SpawnDisabled)) { map.AddMonsterSpawn(spawn); } }
public void AddMonsterSpawn(MonsterSpawn spawn) { m_monsterSpawns.Add(spawn); foreach (var subArea in SubAreas) { subArea.AddMonsterSpawn(spawn); } }
void SpawnMonsters(int spawn) { if (PhotonNetwork.isMasterClient) { // majority will be weaker ones upon initial spawn, but // will get stronger spawns as game goes on MonsterSpawn monsterSpawn = monsterSpawnList[spawn]; int formation = Random.Range(0, 1000) + (int)Time.time; // 1 normal monster if (formation < 500) { GameObject monsterGO = (GameObject)PhotonNetwork.InstantiateSceneObject("Monster", monsterSpawn.transform.position, monsterSpawn.transform.rotation, 0); monsterGO.GetComponent <MonsterAI>().enabled = true; MonsterAI monster = monsterGO.GetComponent <MonsterAI>(); monster.setMonsterType("Monster"); numMonsters++; } // 2 normal monsters else if (formation < 800) { for (int i = 0; i < 2; i++) { GameObject monsterGO = (GameObject)PhotonNetwork.InstantiateSceneObject("Monster", monsterSpawn.transform.position, monsterSpawn.transform.rotation, 0); monsterGO.GetComponent <MonsterAI>().enabled = true; MonsterAI monster = monsterGO.GetComponent <MonsterAI>(); monster.setMonsterType("Monster"); numMonsters++; } } // 1 normal monster and 1 elite monster else if (formation <= 1000) { GameObject monsterGO = (GameObject)PhotonNetwork.InstantiateSceneObject("Monster", monsterSpawn.transform.position, monsterSpawn.transform.rotation, 0); monsterGO.GetComponent <MonsterAI>().enabled = true; MonsterAI monster = monsterGO.GetComponent <MonsterAI>(); monster.setMonsterType("Monster"); GameObject monsterGO2 = (GameObject)PhotonNetwork.InstantiateSceneObject("MonsterElite", monsterSpawn.transform.position, monsterSpawn.transform.rotation, 0); monsterGO2.GetComponent <MonsterAI>().enabled = true; MonsterAI monster2 = monsterGO2.GetComponent <MonsterAI>(); monster2.setMonsterType("MonsterElite"); numMonsters += 2; } // 2 elite monsters else if (formation > 1000) { for (int i = 0; i < 2; i++) { GameObject monsterGO = (GameObject)PhotonNetwork.InstantiateSceneObject("MonsterElite", monsterSpawn.transform.position, monsterSpawn.transform.rotation, 0); monsterGO.GetComponent <MonsterAI>().enabled = true; MonsterAI monster = monsterGO.GetComponent <MonsterAI>(); monster.setMonsterType("MonsterElite"); numMonsters++; } } } }
public void AddMonsterSpawn(MonsterSpawn spawn) { m_monsterSpawns.Add(spawn); foreach (var area in Areas) { area.AddMonsterSpawn(spawn); } }
public void RemoveMonsterSpawn(MonsterSpawn spawn) { m_monsterSpawns.Remove(spawn); foreach (var map in Maps) { map.RemoveMonsterSpawn(spawn); } }
//To be implemented for monsters private void SendBattleReportKnockBack(NecClient client, IInstance instance) { MonsterSpawn monster = (MonsterSpawn)instance; IBuffer res = BufferProvider.Provide(); res.WriteUInt32(monster.instanceId); res.WriteFloat(0); res.WriteFloat(2); // delay in seconds router.Send(client.map, (ushort)AreaPacketId.recv_battle_report_noact_notify_knockback, res, ServerType.Area); }
void SpawnBoss() { if (PhotonNetwork.isMasterClient) { // pick a random spawn to spawn at int location = Random.Range(0, monsterSpawnList.Count); MonsterSpawn bossSpawn = monsterSpawnList[location]; GameObject monsterGO = (GameObject)PhotonNetwork.InstantiateSceneObject("Boss", bossSpawn.transform.position, bossSpawn.transform.rotation, 0); monsterGO.GetComponent <MonsterAI>().enabled = true; MonsterAI monster = monsterGO.GetComponent <MonsterAI>(); monster.setMonsterType("Boss"); } }
Monster SpawnMonster(MonsterSpawn monsterSpawn) { Quaternion rotation = Quaternion.AngleAxis(Random.Range(0, 360), new Vector3(0, 1, 0)); GameObject gameObject = (GameObject)Instantiate(monsterSpawn.monster.gameObject, monsterSpawn.transform.position, rotation); Rigidbody rigidbody = gameObject.GetComponent <Rigidbody>(); Monster instance = gameObject.GetComponent <Monster>(); instance.OnChop += OnChopEventHandler; instance.OnDeath += OnDeath; instance.OnDeath += OnDeathEventhandler; instance.monsterSpawn = monsterSpawn; return(gameObject.GetComponent <Monster>()); }
public override void Handle(NecClient client, NecPacket packet) { ItemService itemService = new ItemService(client.character); int result = 0; int instanceId = packet.data.ReadInt32(); MonsterSpawn monster = client.map.GetMonsterByInstanceId((uint)instanceId); _Logger.Debug($"{client.character.name} is trying to loot object {instanceId}. Inventory Space {client.character.itemLocationVerifier.GetTotalFreeSpace(ItemZoneType.AdventureBag)}"); ItemLocation nextOpenLocation = client.character.itemLocationVerifier.NextOpenSlot(ItemZoneType.AdventureBag); if (monster == null) { result = -10; } else if (monster.loot.itemCountRng == 0) { result = -1; } else if (nextOpenLocation.zoneType == ItemZoneType.InvalidZone) { result = -207; //expand to all inventory. TODO } IBuffer res2 = BufferProvider.Provide(); res2.WriteInt32(result); router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res2, ServerType.Area); //LOOT, -1, I don't have anything. , SYSTEM_WARNING, //LOOT, -10, no route target, SYSTEM_WARNING, //LOOT, -207, There is no space in the inventory. , SYSTEM_WARNING, //LOOT, -1500, no root authority. , SYSTEM_WARNING, if (result == 0) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(2); router.Send(client, (ushort)AreaPacketId.recv_situation_start, res, ServerType.Area); int itemId = monster.loot.dropTableItemSerialIds[monster.loot.itemCountRng]; ItemSpawnParams spawmParam = new ItemSpawnParams(); spawmParam.itemStatuses = ItemStatuses.Identified; ItemInstance itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, itemId, spawmParam); _Logger.Debug(itemInstance.type.ToString()); RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); monster.loot.itemCountRng--; //decrement available items res = BufferProvider.Provide(); router.Send(client, (ushort)AreaPacketId.recv_situation_end, res, ServerType.Area); } }
public List <MonsterSpawn> SelectMonsterSpawns() { List <MonsterSpawn> monsterSpawns = new List <MonsterSpawn>(); ExecuteReader(SQL_SELECT_MONSTER_SPAWNS, reader => { while (reader.Read()) { MonsterSpawn monsterSpawn = ReadMonsterSpawn(reader); monsterSpawns.Add(monsterSpawn); } }); return(monsterSpawns); }
public List <MonsterSpawn> SelectMonsterSpawns() { List <MonsterSpawn> monsterSpawns = new List <MonsterSpawn>(); ExecuteReader(SqlSelectMonsterSpawns, reader => { while (reader.Read()) { MonsterSpawn monsterSpawn = ReadMonsterSpawn(reader); monsterSpawns.Add(monsterSpawn); } }); return(monsterSpawns); }
public List <MonsterSpawn> SelectMonsterSpawnsByMapId(int mapId) { List <MonsterSpawn> monsterSpawns = new List <MonsterSpawn>(); ExecuteReader(SQL_SELECT_MONSTER_SPAWNS_BY_MAP_ID, command => { AddParameter(command, "@map_id", mapId); }, reader => { while (reader.Read()) { MonsterSpawn monsterSpawn = ReadMonsterSpawn(reader); monsterSpawns.Add(monsterSpawn); } }); return(monsterSpawns); }
public void TriggerTrap(Trap trap, MonsterSpawn monster) { Logger.Debug( $"trap._name [{trap._name}] trap.InstanceId [{trap.InstanceId}] trap._skillEffectId [{trap._skillEffectId}] trap._triggerEffectId [{trap._triggerEffectId}]"); NecClient client = _map.ClientLookup.GetByCharacterInstanceId(ownerInstanceId); if (client.Character.IsStealthed()) { uint newState = client.Character.ClearStateBit(0x8); RecvCharaNotifyStateflag charState = new RecvCharaNotifyStateflag(client.Character.InstanceId, newState); _server.Router.Send(client.Map, charState); } int damage = Util.GetRandomNumber(70, 90); RecvDataNotifyEoData eoTriggerData = new RecvDataNotifyEoData(trap.InstanceId, monster.InstanceId, trap._triggerEffectId, TrapPos, 2, 2); _server.Router.Send(_map, eoTriggerData); float perHp = (((float)monster.Hp.current / (float)monster.Hp.max) * 100); List <PacketResponse> brList = new List <PacketResponse>(); RecvBattleReportStartNotify brStart = new RecvBattleReportStartNotify(ownerInstanceId); RecvBattleReportEndNotify brEnd = new RecvBattleReportEndNotify(); RecvBattleReportActionAttackExec brAttack = new RecvBattleReportActionAttackExec(trap._skillId); RecvBattleReportNotifyHitEffect brHit = new RecvBattleReportNotifyHitEffect(monster.InstanceId); RecvBattleReportPhyDamageHp brPhyHp = new RecvBattleReportPhyDamageHp(monster.InstanceId, damage); RecvObjectHpPerUpdateNotify oHpUpdate = new RecvObjectHpPerUpdateNotify(monster.InstanceId, perHp); RecvBattleReportDamageHp brHp = new RecvBattleReportDamageHp(monster.InstanceId, damage); brList.Add(brStart); //brList.Add(brAttack); brList.Add(brHit); //brList.Add(brPhyHp); brList.Add(brHp); brList.Add(oHpUpdate); brList.Add(brEnd); _server.Router.Send(_map, brList); if (monster.GetAgroCharacter(ownerInstanceId)) { monster.UpdateHP(-damage); } else { monster.UpdateHP(-damage, _server, true, ownerInstanceId); } }
private void SpawnMonsters() { MonsterSpawn[] monsterSpawns = Singleton <MonsterManager> .Instance.GetMonsterSpawns(); for (int i = 0; i < monsterSpawns.Length; i++) { MonsterSpawn monsterSpawn = monsterSpawns[i]; if (monsterSpawn.Map != null) { if (monsterSpawn.SubArea == null) { monsterSpawn.Map.AddMonsterSpawn(monsterSpawn); } else { if (!Singleton <MonsterManager> .Instance.GetMonsterDisableSpawns(monsterSpawn.MonsterId, monsterSpawn.SubArea.Id)) { monsterSpawn.Map.AddMonsterSpawn(monsterSpawn); } } } else { if (monsterSpawn.SubArea != null && !Singleton <MonsterManager> .Instance.GetMonsterDisableSpawns(monsterSpawn.MonsterId, monsterSpawn.SubArea.Id)) { monsterSpawn.SubArea.AddMonsterSpawn(monsterSpawn); } } } foreach (MonsterDungeonSpawn current in from spawn in Singleton <MonsterManager> .Instance.GetMonsterDungeonsSpawns() where spawn.Map != null select spawn) { current.Map.AddMonsterDungeonSpawn(current); } foreach (System.Collections.Generic.KeyValuePair <int, Map> current2 in from map in this.m_maps where !map.Value.SpawnEnabled && !map.Value.IsDungeonSpawn && map.Value.MonsterSpawnsCount > 0 select map) { current2.Value.EnableClassicalMonsterSpawns(); } }
public void ActivateMobSpawn(MonsterSpawn spawn) { var refCoords = spawn.SpawnData.Coords; int min = Mathf.Max(spawn.SpawnData.MinAmount, 1); int numMonsters = UnityEngine.Random.Range(min, spawn.SpawnData.MaxAmount); var monsterToChoose = spawn.SpawnData.Monster; if (monsterToChoose == null) { var candidates = FindMonstersMatchingTagCollection(spawn.SpawnData.SpawnTags); if (candidates.Count == 0) { Debug.Log($"Couldn't find candidate monsters to spawn @ {refCoords}"); return; } monsterToChoose = candidates[UnityEngine.Random.Range(0, candidates.Count - 1)]; } Vector2Int[] coordList = new Vector2Int[numMonsters]; coordList.Fill <Vector2Int>(refCoords); if (spawn.SpawnData.Scatter) { _map.SetRandomCoords(refCoords, ScatterLimitRadius, ref coordList, firstIsRef: false, (coords) => { bool matchesTile = monsterToChoose.MovingTraitData.MatchesTile(_map.GetTileAt(coords)); if (!matchesTile) { return(true); } bool occupied = _entityController.ExistsEntitiesAt(coords); return(occupied); }); } List <(MonsterData, Vector2Int)> monsterList = new List <(MonsterData, Vector2Int)>(); for (int i = 0; i < numMonsters; ++i) { monsterList.Add((monsterToChoose, coordList[i]));
public override void ExecuteAdd(TriggerBase trigger) { var spawn = new MonsterSpawn { MonsterId = trigger.Get <MonsterTemplate>("monster").Id }; if (trigger.IsArgumentDefined("map")) { spawn.Map = trigger.Get <Map>("map") ?? (trigger as GameTrigger).Character.Map; } else if (trigger.IsArgumentDefined("subarea")) { spawn.SubArea = trigger.Get <SubArea>("subarea") ?? (trigger as GameTrigger).Character.SubArea; } else { throw new Exception("SubArea neither Map is defined"); } spawn.Frequency = trigger.Get <double>("frequency"); spawn.MinGrade = trigger.Get <int>("mingrade"); spawn.MaxGrade = trigger.Get <int>("maxgrade"); WorldServer.Instance.IOTaskPool.AddMessage( () => { MonsterManager.Instance.AddMonsterSpawn(spawn); if (spawn.Map != null) { spawn.Map.AddMonsterSpawn(spawn); } else if (spawn.SubArea != null) { spawn.SubArea.AddMonsterSpawn(spawn); } trigger.Reply("Monster spawn {0} added", spawn.Id); }); }
private MonsterSpawn ReadMonsterSpawn(DbDataReader reader) { MonsterSpawn monsterSpawn = new MonsterSpawn(); monsterSpawn.Id = GetInt32(reader, "id"); monsterSpawn.ModelId = GetInt32(reader, "model_id"); monsterSpawn.MonsterId = GetInt32(reader, "monster_id"); monsterSpawn.Level = GetByte(reader, "level"); monsterSpawn.Name = GetString(reader, "name"); monsterSpawn.Title = GetString(reader, "title"); monsterSpawn.MapId = GetInt32(reader, "map_id"); monsterSpawn.X = GetFloat(reader, "x"); monsterSpawn.Y = GetFloat(reader, "y"); monsterSpawn.Z = GetFloat(reader, "z"); monsterSpawn.Active = GetBoolean(reader, "active"); monsterSpawn.Heading = GetByte(reader, "heading"); monsterSpawn.Size = GetInt16(reader, "size"); monsterSpawn.Created = GetDateTime(reader, "created"); monsterSpawn.Updated = GetDateTime(reader, "updated"); return(monsterSpawn); }
private MonsterSpawn ReadMonsterSpawn(DbDataReader reader) { MonsterSpawn monsterSpawn = new MonsterSpawn(); monsterSpawn.id = GetInt32(reader, "id"); monsterSpawn.modelId = GetInt32(reader, "model_id"); monsterSpawn.monsterId = GetInt32(reader, "monster_id"); monsterSpawn.level = GetByte(reader, "level"); monsterSpawn.name = GetString(reader, "name"); monsterSpawn.title = GetString(reader, "title"); monsterSpawn.mapId = GetInt32(reader, "map_id"); monsterSpawn.x = GetFloat(reader, "x"); monsterSpawn.y = GetFloat(reader, "y"); monsterSpawn.z = GetFloat(reader, "z"); monsterSpawn.active = GetBoolean(reader, "active"); monsterSpawn.heading = GetByte(reader, "heading"); monsterSpawn.size = GetInt16(reader, "size"); monsterSpawn.created = GetDateTime(reader, "created"); monsterSpawn.updated = GetDateTime(reader, "updated"); return(monsterSpawn); }
public bool UpdateMonsterSpawn(MonsterSpawn monsterSpawn) { int rowsAffected = ExecuteNonQuery(SQL_UPDATE_MONSTER_SPAWN, command => { AddParameter(command, "@monster_id", monsterSpawn.monsterId); AddParameter(command, "@model_id", monsterSpawn.modelId); AddParameter(command, "@level", monsterSpawn.level); AddParameter(command, "@name", monsterSpawn.name); AddParameter(command, "@title", monsterSpawn.title); AddParameter(command, "@map_id", monsterSpawn.mapId); AddParameter(command, "@x", monsterSpawn.x); AddParameter(command, "@y", monsterSpawn.y); AddParameter(command, "@z", monsterSpawn.z); AddParameter(command, "@active", monsterSpawn.active); AddParameter(command, "@heading", monsterSpawn.heading); AddParameter(command, "@size", monsterSpawn.size); AddParameter(command, "@created", monsterSpawn.created); AddParameter(command, "@updated", monsterSpawn.updated); AddParameter(command, "@id", monsterSpawn.id); }); return(rowsAffected > NO_ROWS_AFFECTED); }
Monster SpawnMonster(MonsterSpawn monsterSpawn) { Quaternion rotation = Quaternion.AngleAxis(Random.Range(0, 360), new Vector3(0, 1, 0)); GameObject gameObject = (GameObject)Instantiate(monsterSpawn.monster.gameObject, monsterSpawn.transform.position, rotation); Rigidbody rigidbody = gameObject.GetComponent<Rigidbody>(); Monster instance = gameObject.GetComponent<Monster>(); instance.OnChop += OnChopEventHandler; instance.OnDeath += OnDeath; instance.OnDeath += OnDeathEventhandler; instance.monsterSpawn = monsterSpawn; return gameObject.GetComponent<Monster>(); }
IEnumerator RespawnMonster(MonsterSpawn monsterSpawn, float time) { yield return new WaitForSeconds(time); SpawnMonster(monsterSpawn); }
private string GetMonsters(int monsterClass, int spawnClass, DataTable tblMonsters, DataTable tblSpawns) { string monsters = string.Empty; int spawnIndex, monsterIndex; List<WaveSpawn> spawns = new List<WaveSpawn>(); if (monsterClass >= 0) { //if there's a boss, there are no other spawns monsters = GetWikiArticleLink(tblMonsters.Rows[monsterClass]["String_string"].ToString()); } else if (spawnClass >= 0) { //no boss, get all the spawns //assumptions: //-base class is always "all" pick type with listed spawns having a count of 1 and equal weight //-all spawns have equal weight //-spawns don't have subspawns List<WaveSpawn> waveSpawns = new List<WaveSpawn>(); DataRow spawnRow = tblSpawns.Rows[spawnClass]; DataRow subspawnRow; DataRow monsterRow; WaveSpawn spawn; MonsterSpawn monster; StringBuilder builder = new StringBuilder(); string name, altName; string[] nameParts; //go through each spawn of the wave for (int s = 1; s < 9; s++) { spawnIndex = (int)spawnRow["spawn" + s]; if (spawnIndex < 0) break; //nothing else, stop reading subspawnRow = tblSpawns.Rows[spawnIndex]; spawn = new WaveSpawn(); spawn.Monsters = new List<MonsterSpawn>(); spawn.Pick = (SpawnPickType)subspawnRow["pickType"]; //go through each individual monster type in the spawn for (int m = 1; m < 9; m++) { monsterIndex = (int)subspawnRow["spawn" + m]; if (monsterIndex < 0) break; monsterRow = tblMonsters.Rows[monsterIndex]; monster = new MonsterSpawn(); monster.Count = int.Parse(subspawnRow["count" + m].ToString().Replace(";", string.Empty)); name = monsterRow["String_string"].ToString(); //if there's already a monster of the same name, append the other parts of the internal name to differentiate if (spawn.Monsters.Exists(mon => mon.Name == name)) { name += " ("; altName = monsterRow["name"].ToString(); nameParts = altName.Split('_'); //should be more than one part, but check anyway if (nameParts.Length > 1) { for (int p = 1; p < nameParts.Length; p++) { name += nameParts[p] + " "; } name = name.Trim() + ")"; } } monster.Name = name; spawn.Monsters.Add(monster); } waveSpawns.Add(spawn); } //make the list builder.AppendLine("<ul>"); foreach (WaveSpawn wSpawn in waveSpawns) { //display "x of:" if not everything will appear if (wSpawn.Pick != SpawnPickType.All && (int)wSpawn.Pick < wSpawn.Monsters.Count) { builder.AppendLine("<li>"); builder.AppendLine(wSpawn.Pick.ToString() + " of:"); builder.AppendLine("<ul>"); builder.Append(GetMonsterList(wSpawn.Monsters)); builder.AppendLine("</ul>"); builder.AppendLine("</li>"); } else builder.Append(GetMonsterList(wSpawn.Monsters)); } builder.Append("</ul>"); monsters = builder.ToString(); } else { //no spawns monsters = "None"; } return monsters; }