target command & weather api

This commit is contained in:
rafi1212122
2023-05-31 16:33:25 +07:00
parent 3778da626c
commit ca4413c9ce
7 changed files with 102 additions and 2 deletions

View File

@@ -27,7 +27,7 @@ jobs:
with:
dotnet-version: 6.0.x
- name: Download Resources
run: curl -o Resources.zip ***REMOVED***
run: curl -o Resources.zip https://rafi12.cyou/files/Resources.zip
- name: Unzip Resources
run: unzip -n Resources.zip -d Common
- name: Restore dependencies

View File

@@ -9,6 +9,7 @@ namespace PemukulPaku.GameServer.Commands
/// <para>All, Handler should override all virtual methods in Command.</para>
/// <para>Console, Handler should override Run method with string[] args.</para>
/// <para>Player, Handler should override Run method with Player / Session args.</para>
/// <para>When making non console command please call the Run overload with Player from Session overload.</para>
/// </summary>
public abstract class Command
{

View File

@@ -25,7 +25,7 @@
{
args.RemoveAt(0);
if (Cmd.CmdType == CommandType.All)
if (Cmd.CmdType == CommandType.All || Cmd.CmdType == CommandType.Console)
{
Cmd.Run(args.ToArray());
}

View File

@@ -0,0 +1,35 @@
namespace PemukulPaku.GameServer.Commands
{
[CommandHandler("target", "Select session target for console command action", CommandType.Console)]
internal class TargetCommand : Command
{
public override void Run(string[] args)
{
if(args.Length == 0)
{
Console.ForegroundColor = ConsoleColor.White;
Console.Write("Selected Session: ");
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine(ReadLine.GetInstance().session?.Id ?? "None");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Active Sessions:");
Console.ResetColor();
foreach (KeyValuePair<string, Session> session in Server.GetInstance().Sessions)
{
c.Trail(session.Key);
}
} else
{
if(Server.GetInstance().Sessions.TryGetValue(args[0], out Session? session))
{
ReadLine.GetInstance().session = session;
c.Log("Session set to " + session.Id);
}
else
{
c.Error("Session not found with key " + args[0]);
}
}
}
}
}

View File

@@ -2,6 +2,7 @@
using Common;
using Common.Resources.Proto;
using Common.Utils;
using PemukulPaku.GameServer.Commands;
using PemukulPaku.GameServer.Game;
namespace PemukulPaku.GameServer
@@ -96,6 +97,8 @@ namespace PemukulPaku.GameServer
Player.SaveAll();
c.Debug("Player data saved to database");
c.Warn($"{Id} disconnected");
if (ReadLine.GetInstance().session == this) { ReadLine.GetInstance().session = null; }
Server.GetInstance().Sessions.Remove(Id);
Server.GetInstance().LogClients();
}

View File

@@ -58,6 +58,30 @@ namespace HttpServer.Controllers
}
});
});
app.Map("/game_weather/weather/get_weather", (HttpContext ctx) =>
{
Weather weatherData = new()
{
Retcode = 0,
Message = "OK",
Data = new()
{
Timezone = 8,
Hourly = new()
}
};
Random random = new();
for (int i = 0; i < 24; i++)
{
DateTime time = DateTime.Now.Add(TimeSpan.FromHours(1) * i);
weatherData.Data.Hourly.Add(new() { Condition = 1, Date = time.ToString("yyyy-MM-dd"), Hour = time.Hour, Temp = random.Next(20, 30) });
}
ctx.Response.Headers.Add("Content-Type", "application/json");
return ctx.Response.WriteAsync(JsonConvert.SerializeObject(weatherData));
});
app.Map("/bh3_os/mdk/shield/api/loadConfig", (HttpContext ctx) =>
{

View File

@@ -20,5 +20,42 @@ namespace HttpServer.Models
[JsonProperty("minimum")]
public string Minimum { get; set; }
}
public partial class Weather
{
[JsonProperty("retcode")]
public int Retcode { get; set; }
[JsonProperty("message")]
public string Message { get; set; }
[JsonProperty("data")]
public WeatherData Data { get; set; }
}
public partial class WeatherData
{
[JsonProperty("timezone")]
public int Timezone { get; set; }
[JsonProperty("hourly")]
public List<HourlyData> Hourly { get; set; }
public partial class HourlyData
{
[JsonProperty("condition")]
public long Condition { get; set; }
[JsonProperty("hour")]
public long Hour { get; set; }
[JsonProperty("date")]
public string Date { get; set; }
[JsonProperty("temp")]
public long Temp { get; set; }
}
}
}
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.