Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

添加插件:SwitchCommands #17

Merged
merged 4 commits into from
Apr 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions Plugin.sln
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RegionView", "RegionView\Re
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Noagent", "Noagent\Noagent.csproj", "{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SwitchCommands", "SwitchCommands\SwitchCommands.csproj", "{572F74CB-7DE5-45DE-AF20-71858721C9DA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -288,14 +290,6 @@ Global
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|Any CPU.Build.0 = Release|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|x64.ActiveCfg = Release|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|x64.Build.0 = Release|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Debug|x64.ActiveCfg = Debug|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Debug|x64.Build.0 = Debug|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|Any CPU.Build.0 = Release|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|x64.ActiveCfg = Release|Any CPU
{41B3DE8D-F7B2-44E0-AD35-971140F49E81}.Release|x64.Build.0 = Release|Any CPU
{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand All @@ -304,6 +298,14 @@ Global
{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}.Release|Any CPU.Build.0 = Release|Any CPU
{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}.Release|x64.ActiveCfg = Release|Any CPU
{AFB08FA2-C6C6-4759-8117-E1CD44E1BCD9}.Release|x64.Build.0 = Release|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Debug|x64.ActiveCfg = Debug|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Debug|x64.Build.0 = Debug|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Release|Any CPU.Build.0 = Release|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Release|x64.ActiveCfg = Release|Any CPU
{572F74CB-7DE5-45DE-AF20-71858721C9DA}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,4 @@
| [TownNPCHomes](https://github.com/Controllerdestiny/TShockPlugin/tree/master/TownNPCHomes) | NPC快速回家 | 无 |
| [RegionView](https://github.com/Controllerdestiny/TShockPlugin/tree/master/RegionView) | 显示区域边界 | 无 |
| [Noagent](https://github.com/Controllerdestiny/TShockPlugin/tree/master/Noagent) | 禁止代理ip进入 | 无 |
| [SwitchCommands](https://github.com/Controllerdestiny/TShockPlugin/tree/master/SwitchCommands) | 区域执行指令 | 无 |
45 changes: 45 additions & 0 deletions SwitchCommands/CommandInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TShockAPI;
//using PlaceholderAPI;

namespace SwitchCommands {
public class CommandInfo {
public List<string> commandList = new List<string>();
public float cooldown = 0;
public bool ignorePerms = false;
}

public class SwitchPos {
public int X = 0, Y = 0;

public SwitchPos() {
X = 0;
Y = 0;
}

public SwitchPos(int x, int y) {
X = x;
Y = y;
}

public override string ToString() {
return "X: {0}, Y: {1}".SFormat(X, Y);
}

public override bool Equals(object obj) {
var check = obj as SwitchPos;

if (check == null) return false;

return check.X == X && check.Y == Y;
}

public override int GetHashCode() {
return base.GetHashCode();
}
}
}
28 changes: 28 additions & 0 deletions SwitchCommands/Database.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using Microsoft.Xna.Framework;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TShockAPI;
//using PlaceholderAPI;

namespace SwitchCommands {
public class Database {
public static string databasePath = Path.Combine(TShock.SavePath, "开关配置表.json");

public Dictionary<string, CommandInfo> switchCommandList = new Dictionary<string, CommandInfo>();

public void Write(string path) {
File.WriteAllText(path, JsonConvert.SerializeObject(this, Formatting.Indented));
}

public static Database Read(string path) {
if (!File.Exists(path))
return new Database();
return JsonConvert.DeserializeObject<Database>(File.ReadAllText(path));
}
}
}
172 changes: 172 additions & 0 deletions SwitchCommands/PluginCommands.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using PlaceholderAPI;
using TShockAPI;

namespace SwitchCommands {
public class PluginCommands {
public static string switchParameters = "/开关 <添加/列表/删除/冷却/权限忽略/取消/重绑/完成>";

public static void RegisterCommands() {
Commands.ChatCommands.Add(new Command("switch.admin", SwitchCmd, "开关","kg", "switch"));
Commands.ChatCommands.Add(new Command("switch.admin", SwitchReload, "重载开关","reload"));
}

private static void SwitchReload(CommandArgs args) {
SwitchCommands.database = Database.Read(Database.databasePath);
args.Player.SendErrorMessage("开关插件重载成功!!!");
if (!File.Exists(Database.databasePath)) {
SwitchCommands.database.Write(Database.databasePath);
}
}

private static void SwitchCmd(CommandArgs args) {
var player = args.Player;

switch (player.GetData<PlayerState>("PlayerState")) {
case PlayerState.None:
player.SendSuccessMessage("激活一个开关以将其绑定,之后可输入/开关 ,查看子命令");
player.SetData("PlayerState", PlayerState.SelectingSwitch);
return;

case PlayerState.AddingCommands:
if (args.Parameters.Count == 0) {
player.SendErrorMessage("正确指令:");
player.SendErrorMessage(switchParameters);
return;
}

if (player.GetData<CommandInfo>("CommandInfo") == null)
player.SetData("CommandInfo", new CommandInfo());

var cmdInfo = player.GetData<CommandInfo>("CommandInfo");

switch (args.Parameters[0].ToLower()) {
case "add":
case "添加":
case "tj":
var command = "/" + string.Join(" ", args.Parameters.Skip(1));
cmdInfo.commandList.Add(command);
player.SendSuccessMessage("成功添加: {0}".SFormat(command));
SwitchCommands.database.Write(Database.databasePath);
break;

case "list":
case "列表":
case "lb":
player.SendMessage("当前开关绑定的指令:", Color.Green);
for (int x = 0; x < cmdInfo.commandList.Count; x++) {
player.SendMessage("({0}) ".SFormat(x) + cmdInfo.commandList[x], Color.Yellow);
SwitchCommands.database.Write(Database.databasePath);
}
break;

case "del":
case "删除":
case "sc":
int commandIndex = 0;

if (args.Parameters.Count < 2 || !int.TryParse(args.Parameters[1], out commandIndex)) {
player.SendErrorMessage("语法错误:/开关 del <指令>");
SwitchCommands.database.Write(Database.databasePath);
return;
}

var cmdDeleted = cmdInfo.commandList[commandIndex];
cmdInfo.commandList.RemoveAt(commandIndex);

player.SendSuccessMessage("成功删除了第{1}条指令:{0}。".SFormat(cmdDeleted, commandIndex));
SwitchCommands.database.Write(Database.databasePath);
break;

case "冷却":
case "cooldown":
case "lq":
float 冷却 = 0;

if (args.Parameters.Count < 2 || !float.TryParse(args.Parameters[1], out 冷却)) {
player.SendErrorMessage("语法错误:/开关 冷却 <秒>");
SwitchCommands.database.Write(Database.databasePath);
return;
}

cmdInfo.cooldown = 冷却;

player.SendSuccessMessage("冷却时间已设置为 {0} 秒".SFormat(冷却));
SwitchCommands.database.Write(Database.databasePath);
break;

case "权限忽略":
case "ignoreperms":
case "qxhl":
bool 权限忽略 = false;

if (args.Parameters.Count < 2 || !bool.TryParse(args.Parameters[1], out 权限忽略)) {
player.SendErrorMessage("语法错误:/开关 权限忽略 <true/false>");
SwitchCommands.database.Write(Database.databasePath);
return;
}

cmdInfo.ignorePerms = 权限忽略;

player.SendSuccessMessage("是否忽略玩家权限设置为: {0}.".SFormat(权限忽略));
SwitchCommands.database.Write(Database.databasePath);
break;

case "取消":
case "cancel":
case "qx":
player.SetData("PlayerState", PlayerState.None);
player.SetData("CommandInfo", new CommandInfo());
player.SendSuccessMessage("已取消添加要添加的命令");
SwitchCommands.database.Write(Database.databasePath);
return;

case "重绑":
case "rebind":
case "zb":
player.SendSuccessMessage("重新激活开关后可以重新绑定");
player.SetData("PlayerState", PlayerState.SelectingSwitch);
SwitchCommands.database.Write(Database.databasePath);
return;

case "完成":
case "done":
case "wc":
var switchPos = player.GetData<SwitchPos>("SwitchPos");

player.SendSuccessMessage("设置成功的开关位于 X: {0}, Y: {1}".SFormat(switchPos.X, switchPos.Y));
foreach(string cmd in cmdInfo.commandList) {
player.SendMessage(cmd, Color.Yellow);
SwitchCommands.database.Write(Database.databasePath);
}
SwitchCommands.database.switchCommandList[player.GetData<SwitchPos>("SwitchPos").ToString()] = cmdInfo;
player.SetData("PlayerState", PlayerState.None);
player.SetData("SwitchPos", new Vector2());
player.SetData("CommandInfo", new CommandInfo());
SwitchCommands.database.Write(Database.databasePath);
return;

default:
player.SendErrorMessage("语法无效. " + switchParameters);
return;
}

player.SetData("CommandInfo", cmdInfo);

return;
}
}

public enum PlayerState {
None,
AddingCommands,
SelectingSwitch
}
}
}
26 changes: 26 additions & 0 deletions SwitchCommands/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# SwitchCommand 区域显示

- 作者: Johuan ,Cjx
- 出处: github
- 区域指令

## 更新日志

```
暂无
```

## 指令

| 语法 | 权限 | 说明 |
| -------------- | :-----------------: | :------: |
| /switch(开关) <添加/列表/删除/冷却/权限忽略/取消/重绑/完成> | switch.admin | 无 |

## 配置

```json
暂无
```
## 反馈
- 共同维护的插件库:https://github.com/WindFrost-CSFT/TShockPlugin
- 国内社区trhub.cn 或 TShock官方群等
Loading
Loading