diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 3e0f051c..dd586fb1 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -148,15 +148,13 @@ namespace FFXIVClassic_Map_Server SetTargetPacket setTarget = new SetTargetPacket(subpacket.data); session.GetActor().currentTarget = setTarget.actorID; + session.GetActor().isAutoAttackEnabled = setTarget.attackTarget != 0xE0000000; session.GetActor().BroadcastPacket(SetActorTargetAnimatedPacket.BuildPacket(session.id, setTarget.actorID), true); break; //Lock Target case 0x00CC: LockTargetPacket lockTarget = new LockTargetPacket(subpacket.data); session.GetActor().currentLockedTarget = lockTarget.actorID; - // todo: this really needs figuring out.. - session.GetActor().isAutoAttackEnabled = lockTarget.otherVal == 0x00000040; - break; //Start Event case 0x012D: diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index 2e88ee53..978187cd 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -547,8 +547,9 @@ namespace FFXIVClassic_Map_Server z.SpawnAllActors(true); } - public void SpawnBattleNpcById(uint id, Area area = null) + public BattleNpc SpawnBattleNpcById(uint id, Area area = null) { + BattleNpc bnpc = null; // todo: this is stupid duplicate code and really needs to die, think of a better way later using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) { @@ -582,7 +583,7 @@ namespace FFXIVClassic_Map_Server { area = area ?? Server.GetWorldManager().GetZone(reader.GetUInt16("zoneId")); int actorId = area.GetActorCount() + 1; - var bnpc = area.GetBattleNpcById(id); + bnpc = area.GetBattleNpcById(id); if (bnpc != null) { @@ -644,7 +645,7 @@ namespace FFXIVClassic_Map_Server battleNpc.CalculateBaseStats(); battleNpc.RecalculateStats(); //battleNpc.SetMod((uint)Modifier.ResistFire, ) - + bnpc = battleNpc; area.AddActorToZone(battleNpc); count++; } @@ -660,6 +661,7 @@ namespace FFXIVClassic_Map_Server conn.Dispose(); } } + return bnpc; } public void LoadBattleNpcModifiers(string tableName, string primaryKey, Dictionary list) diff --git a/FFXIVClassic Map Server/actors/Actor.cs b/FFXIVClassic Map Server/actors/Actor.cs index ff589d52..313b62cc 100644 --- a/FFXIVClassic Map Server/actors/Actor.cs +++ b/FFXIVClassic Map Server/actors/Actor.cs @@ -33,6 +33,7 @@ namespace FFXIVClassic_Map_Server.Actors class Actor { + public static uint INVALID_ACTORID = 0xC0000000; public uint actorId; public string actorName; diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs index 7ce0cf7b..618c3b18 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -84,8 +84,8 @@ namespace FFXIVClassic_Map_Server.Actors public uint animationId = 0; - public uint currentTarget = 0xC0000000; - public uint currentLockedTarget = 0xC0000000; + public uint currentTarget = Actor.INVALID_ACTORID; + public uint currentLockedTarget = Actor.INVALID_ACTORID; public uint currentActorIcon = 0; @@ -391,9 +391,9 @@ namespace FFXIVClassic_Map_Server.Actors { if (targid == 0) { - if (currentTarget != 0xC0000000) + if (currentTarget != Actor.INVALID_ACTORID) targid = currentTarget; - else if (currentLockedTarget != 0xC0000000) + else if (currentLockedTarget != Actor.INVALID_ACTORID) targid = currentLockedTarget; } //if (targid != 0) @@ -416,7 +416,7 @@ namespace FFXIVClassic_Map_Server.Actors { this.newMainState = newMainState; } - else + else if (IsEngaged()) { aiContainer.Disengage(); return true; diff --git a/FFXIVClassic Map Server/actors/chara/ai/controllers/BattleNpcController.cs b/FFXIVClassic Map Server/actors/chara/ai/controllers/BattleNpcController.cs index cd8e1961..43359fed 100644 --- a/FFXIVClassic Map Server/actors/chara/ai/controllers/BattleNpcController.cs +++ b/FFXIVClassic Map Server/actors/chara/ai/controllers/BattleNpcController.cs @@ -153,11 +153,11 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers waitTime = tick.AddSeconds(10); owner.OnRoam(tick); - if (!owner.aiContainer.pathFind.IsFollowingPath() && CanMoveForward(0.0f)) + if (CanMoveForward(0.0f) && !owner.aiContainer.pathFind.IsFollowingPath()) { // will move on next tick owner.aiContainer.pathFind.SetPathFlags(PathFindFlags.None); - owner.aiContainer.pathFind.PathInRange(owner.spawnX, owner.spawnY, owner.spawnZ, 1.5f, 20.0f); + owner.aiContainer.pathFind.PathInRange(owner.spawnX, owner.spawnY, owner.spawnZ, 1.5f, 50.0f); } } @@ -173,7 +173,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers if (!owner.isMovingToSpawn && owner.aiContainer.pathFind.AtPoint() && owner.detectionType != DetectionType.None) { - uint levelDifference = (uint)Math.Abs(owner.charaWork.parameterSave.state_mainSkillLevel - chara.charaWork.parameterSave.state_mainSkillLevel); + uint levelDifference = (uint)Math.Abs(owner.GetLevel() - chara.GetLevel()); if (levelDifference <= 10 || (owner.detectionType & DetectionType.IgnoreLevelDifference) != 0 && CanAggroTarget(chara)) { @@ -375,8 +375,8 @@ namespace FFXIVClassic_Map_Server.actors.chara.ai.controllers public override void ChangeTarget(Character target) { owner.target = target; - owner.currentLockedTarget = target?.actorId ?? 0xC0000000; - owner.currentTarget = target?.actorId ?? 0xC0000000; + owner.currentLockedTarget = target?.actorId ?? Actor.INVALID_ACTORID; + owner.currentTarget = target?.actorId ?? Actor.INVALID_ACTORID; foreach (var player in owner.zone.GetActorsAroundActor(owner, 50)) player.QueuePacket(owner.GetHateTypePacket(player)); diff --git a/FFXIVClassic Map Server/packets/receive/SetTargetPacket.cs b/FFXIVClassic Map Server/packets/receive/SetTargetPacket.cs index b38cd5a7..b433a094 100644 --- a/FFXIVClassic Map Server/packets/receive/SetTargetPacket.cs +++ b/FFXIVClassic Map Server/packets/receive/SetTargetPacket.cs @@ -7,7 +7,7 @@ namespace FFXIVClassic_Map_Server.packets.receive { public bool invalidPacket = false; public uint actorID; - public uint otherVal; //Usually 0xE0000000 + public uint attackTarget; //Usually 0xE0000000 public SetTargetPacket(byte[] data) { @@ -17,7 +17,7 @@ namespace FFXIVClassic_Map_Server.packets.receive { try{ actorID = binReader.ReadUInt32(); - otherVal = binReader.ReadUInt32(); + attackTarget = binReader.ReadUInt32(); } catch (Exception){ invalidPacket = true; diff --git a/data/scripts/ally.lua b/data/scripts/ally.lua index 97d797dd..b8c39ff3 100644 --- a/data/scripts/ally.lua +++ b/data/scripts/ally.lua @@ -4,35 +4,35 @@ require ("weaponskill") allyGlobal = { -}; +} function allyGlobal.onSpawn(ally, target) -end; +end function allyGlobal.onEngage(ally, target) -end; +end function allyGlobal.onAttack(ally, target, damage) -end; +end function allyGlobal.onDamageTaken(ally, attacker, damage) -end; +end function allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas) - allyGlobal.HelpPlayers(ally, contentGroupCharas); -end; + allyGlobal.HelpPlayers(ally, contentGroupCharas) +end function allyGlobal.onDeath(ally, player, lastAttacker) -end; +end function allyGlobal.onDespawn(ally) -end; +end function allyGlobal.HelpPlayers(ally, contentGroupCharas, pickRandomTarget) if contentGroupCharas then @@ -44,35 +44,37 @@ function allyGlobal.HelpPlayers(ally, contentGroupCharas, pickRandomTarget) -- do stuff if not ally.IsEngaged() then if chara.IsEngaged() then - allyGlobal.EngageTarget(ally, target, nil); - end; - end; + allyGlobal.EngageTarget(ally, chara.target, nil) + end + end elseif chara.IsMonster() and chara.IsEngaged() then - - end; - end; - end; - end; -end; + if not ally.IsEngaged() then + allyGlobal.EngageTarget(ally, chara.target, nil) + end + end + end + end + end +end function allyGlobal.HealPlayer(ally, player) -end; +end function allyGlobal.SupportAction(ally, player) -end; +end function allyGlobal.EngageTarget(ally, target, contentGroupCharas) if contentGroupCharas then for _, chara in pairs(contentGroupCharas) do if chara.IsMonster() then if chara.allegiance ~= ally.allegiance then - ally.Engage(chara); - end; - end; - end; + ally.Engage(chara) + end + end + end elseif target then - ally.Engage(target); - end; -end; \ No newline at end of file + ally.Engage(target) + end +end \ No newline at end of file diff --git a/data/scripts/directors/Quest/QuestDirectorMan0g001.lua b/data/scripts/directors/Quest/QuestDirectorMan0g001.lua index 56fb527d..81bf270e 100644 --- a/data/scripts/directors/Quest/QuestDirectorMan0g001.lua +++ b/data/scripts/directors/Quest/QuestDirectorMan0g001.lua @@ -14,29 +14,30 @@ function onCreateContentArea(players, director, contentArea, contentGroup) local worldManager = GetWorldManager(); - yshtola = GetWorldManager():SpawnBattleNpcById(6, contentArea); - stahlmann = GetWorldManager():SpawnBattleNpcById(7, contentArea); + yshtola = GetWorldManager().SpawnBattleNpcById(6, contentArea); + stahlmann = GetWorldManager().SpawnBattleNpcById(7, contentArea); - mob1 = GetWorldManager():SpawnBattleNpcById(3, contentArea); - mob2 = GetWorldManager():SpawnBattleNpcById(4, contentArea); - mob3 = GetWorldManager():SpawnBattleNpcById(5, contentArea); + mob1 = GetWorldManager().SpawnBattleNpcById(3, contentArea); + mob2 = GetWorldManager().SpawnBattleNpcById(4, contentArea); + mob3 = GetWorldManager().SpawnBattleNpcById(5, contentArea); local added = false; for i = 0, players.Count do local player = players[i]; + print("asses "..players.Count) if player.currentParty and not added then - player.currentParty.members.Add(6); + print("shitness") + player.currentParty.members:Add(yshtola.actorId); print("cunt") - player.currentParty.members.Add(7); + player.currentParty.members:Add(stahlmann.actorId); print("dickbag") added = true; end; -- dont let player die - player.SetMod(modifiersGlobal.MinimumHpLock, 1); + player:SetMod(modifiersGlobal.MinimumHpLock, 1); + contentGroup:AddMember(player) print("shittttt") - contentGroup:AddMember(player); - player:EndEvent(); - i = i + 1; + break end; print("shit") contentGroup:AddMember(director); diff --git a/data/scripts/unique/fst0Battle03/Monster/yda.lua b/data/scripts/unique/fst0Battle03/Monster/yda.lua index a262f46b..2abf6f76 100644 --- a/data/scripts/unique/fst0Battle03/Monster/yda.lua +++ b/data/scripts/unique/fst0Battle03/Monster/yda.lua @@ -3,9 +3,9 @@ require ("global") require ("ally") function onSpawn(ally) - ally.isAutoAttackEnabled = false; -end; + ally.isAutoAttackEnabled = false +end function onCombatTick(ally, target, tick, contentGroupCharas) - allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas); -end; \ No newline at end of file + allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas) +end \ No newline at end of file