diff --git a/.github/workflows/github-ci.yml b/.github/workflows/github-ci.yml new file mode 100644 index 0000000..1f0ebc0 --- /dev/null +++ b/.github/workflows/github-ci.yml @@ -0,0 +1,45 @@ +name: Build + +on: + # Triggers the workflow on push or pull request events but only for the selected branches + push: + branches: [ test-stable, community ] + pull_request: + branches: [ test-stable, community ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build: + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.allow_failures }} + name: ${{ matrix.name }} / ${{ matrix.config }} + strategy: + matrix: + config: [Debug, Release] + include: + # for the matrix leg matching the os and version + - os: ubuntu-22.04 + name: Ubuntu 22.04 (.Net 7.0) + toolchain: dotnet-sdk-7.0 + allow_failures: true + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + - name: Install dependencies (apt) + if: runner.os == 'Linux' + run: | + wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + rm packages-microsoft-prod.deb + sudo apt-get update && sudo apt-get install -y ${{ matrix.toolchain }} + + - name: Build (dotnet) + run: | + dotnet restore src/Blizzless-D3.sln + dotnet msbuild src/Blizzless-D3.sln /t:Build /p:Configuration=${{ matrix.config }} diff --git a/README.md b/README.md index 966f81f..e5979d3 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,8 @@ The command system allows you to get control of the game world if you have right Check the [report form](docs/report-form.md) before submitting issue, this will help people save time! -# Development Roadmap – DiIiS Emulator +# Development Roadmap – DIII Emulator + ### 1️⃣ Rift / Greater Rift System GR closure: ensure the Greater Rift closes automatically after 15 minutes. diff --git a/Src/DiIiS-NA/D3-игровой сервер/GSSystem/Система заданий/Квестовые события/Реализации/Акт I/SpawnSkeletons.cs b/Src/DiIiS-NA/D3-игровой сервер/GSSystem/Система заданий/Квестовые события/Реализации/Акт I/SpawnSkeletons.cs new file mode 100644 index 0000000..ff7fe82 --- /dev/null +++ b/Src/DiIiS-NA/D3-игровой сервер/GSSystem/Система заданий/Квестовые события/Реализации/Акт I/SpawnSkeletons.cs @@ -0,0 +1,92 @@ +using DiIiS_NA.Core.Logging; +using DiIiS_NA.GameServer.GSSystem.ActorSystem; +using DiIiS_NA.GameServer.GSSystem.ActorSystem.Implementations.Hirelings; +using DiIiS_NA.GameServer.GSSystem.GameSystem; +using DiIiS_NA.GameServer.GSSystem.PlayerSystem; +using DiIiS_NA.GameServer.MessageSystem; +using System.Linq; +using System; +using System.Collections.Generic; +using DiIiS_NA.LoginServer.AccountsSystem; +using DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents; +using DiIiS_NA.GameServer.Core.Types.Math; +using DiIiS_NA.Core.Helpers.Math; +using DiIiS_NA.GameServer.Core.Types.TagMap; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Animation; +using System.Threading.Tasks; +using DiIiS_NA.GameServer.MessageSystem.Message.Definitions.Base; +using DiIiS_NA.D3_GameServer.Core.Types.SNO; + +namespace DiIiS_NA.GameServer.GSSystem.QuestSystem.QuestEvents.Implementations +{ + class SpawnSkeletons : QuestEvent + { + //ActorID: 0x7A3100DD + //ZombieSkinny_A_LeahInn.acr (2050031837) + //ActorSNOId: 0x00031971:ZombieSkinny_A_LeahInn.acr + + private static readonly Logger Logger = LogManager.CreateLogger(); + + public SpawnSkeletons() + : base(151124) + { + } + + public override void Execute(MapSystem.World world) + { + if (world.Game.Empty) return; + //Logger.Debug("SpawnSkeletons event started"); + Task.Delay(1000).ContinueWith(delegate + { + foreach (var plr in world.Game.Players.Values) + plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraCriptedSequenceStartMessage() { Activate = true }); + var SkeletonKing_Bridge = world.GetActorBySNO(ActorSno._trdun_skeletonking_bridge_active); + Task.Delay(1000).ContinueWith(delegate + { + foreach (var plr in world.Game.Players.Values) + plr.InGameClient.SendMessage(new MessageSystem.Message.Definitions.Camera.CameraFocusMessage() { ActorID = (int)SkeletonKing_Bridge.DynamicID(plr), Duration = 1f, Snap = false }); + + StartConversation(world, 17923); + + SkeletonKing_Bridge.PlayAnimation(5, (AnimationSno)SkeletonKing_Bridge.AnimationSet.TagMapAnimDefault[AnimationSetKeys.Opening], 1f); + + world.BroadcastIfRevealed(plr => new SetIdleAnimationMessage + { + ActorID = SkeletonKing_Bridge.DynamicID(plr), + AnimationSNO = AnimationSetKeys.Open.ID, + }, SkeletonKing_Bridge); + + Task.Delay(3000).ContinueWith(delegate + { + foreach (var plr in world.Game.Players.Values) + { + plr.InGameClient.SendMessage(new BoolDataMessage(Opcodes.CameraTriggerFadeToBlackMessage) { Field0 = true }); + plr.InGameClient.SendMessage(new SimpleMessage(Opcodes.CameraSriptedSequenceStopMessage) { }); + } + }); + }); + }); + + + + var spawner = world.GetActorBySNO(ActorSno._trdun_rescuecainskelspawner); + while (spawner != null) + { + var monster = ActorSno._skeletonking_shield_skeleton; + world.SpawnMonster(monster, spawner.Position); + spawner.Destroy(); + spawner = world.GetActorBySNO(ActorSno._trdun_rescuecainskelspawner); + } + } + + private bool StartConversation(MapSystem.World world, Int32 conversationId) + { + foreach (var player in world.Players) + { + player.Value.Conversations.StartConversation(conversationId); + } + return true; + } + + } +}