Skip to content

Commit

Permalink
Merge pull request #293 from 1242509682/master
Browse files Browse the repository at this point in the history
更新:告示牌登录 v1.0.4
  • Loading branch information
Controllerdestiny authored Jul 13, 2024
2 parents e3641d4 + c787846 commit ae21a4c
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 34 deletions.
27 changes: 20 additions & 7 deletions SignInSign/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,26 @@ internal static void SetupCmd(CommandArgs args)
switch (args.Parameters[0].ToLower())
{
case "r":
case "reset":
case "reload":
ReloadCmd(args);
if (args.Player.HasPermission("signinsign.setup"))
{
ReloadCmd(args);
if (SignInSign.Config.Teleport_X > 0 && SignInSign.Config.Teleport_Y > 0)
{
SignInSign.Config.Teleport_X = 0;
SignInSign.Config.Teleport_Y = 0;
SignInSign.Config.Write(Configuration.ConfigPath);
}
}
return;
case "s":
case "set":
if (args.Parameters.Count != 1)
{
args.Player.SendMessage("[告示牌登录]设置传送点命令无需额外参数,将会使用你当前位置。", Microsoft.Xna.Framework.Color.Yellow);
}
else
else if (args.Parameters.Count == 1 && (args.Player.HasPermission("signinsign.tp") || args.Player.HasPermission("signinsign.setup"))) //加个玩家设置TP的权限
{
SignInSign.Config.Teleport_X = x;
SignInSign.Config.Teleport_Y = y;
Expand All @@ -55,11 +65,14 @@ private static void ReloadCmd(CommandArgs args)
//清掉原有的图格
WorldGen.KillTile(Main.spawnTileX, Main.spawnTileY - 3);

//设置墙壁和图格
Main.tile[Main.spawnTileX, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX, Main.spawnTileY - 2].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 2].wall = WallID.EchoWall;
//检查墙壁是否为空,空则放置回声墙
if (Main.tile[Main.spawnTileX, Main.spawnTileY - 3].wall == WallID.None)
{
Main.tile[Main.spawnTileX, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX, Main.spawnTileY - 2].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 2].wall = WallID.EchoWall;
}

Main.tile[Main.spawnTileX, Main.spawnTileY - 3].active(false);
Main.tile[Main.spawnTileX, Main.spawnTileY - 2].active(false);
Expand Down
4 changes: 2 additions & 2 deletions SignInSign/Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ public class Configuration
public bool SignEnable3 = false;

[JsonProperty("创建告示牌的内容,重设指令:/gs r")]
public string SignText = "欢迎来到开荒服\n本服支持连锁挖矿,更多晶塔放置使用\nNPC售卖更多物品,更多材料微光转换\n更有RPG职业商店与魔改BOSS等你体验!\n并配备了在线礼包,进度礼包等福利助你快速成长\n需导出本服角色/地图可加群联系服主\n服务器群:123456\n\n编辑此处输入密码(保存2次)可快速注册登录:\n";
public string SignText = "欢迎来到开荒服!!\n本服支持PE/PC跨平台联机游玩\n每25分钟清理世界与Boss战排名统计\n更多指令教学请输入/help\n点击告示牌可进行传送\n\nTShock官方群:816771079\n";
[JsonProperty("点击告示牌的广播/仅使用者可见")]
public string SignText2 = "在本告示牌依序输入2次:\n[c/F7CCF0:123456] 进行注册登录。";
[JsonProperty("试图破坏告示牌的广播")]
public string SignText3 = "此告示牌不可被修改!";
[JsonProperty("点击告示牌执行什么指令")]
public string[] CommandsOnSignRead { get; set; } = new string[0];
public string[] CmdList { get; set; } = new string[0];
[JsonProperty("点击告示牌给什么BUFF")]
public int[] BuffID { get; set; } = new int[] { };
[JsonProperty("点击告示牌BUFF时长/分钟")]
Expand Down
13 changes: 10 additions & 3 deletions SignInSign/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,17 @@
+ 如需更改告示牌内容:
+ 1.在服务器里使用已登录角色挖掉告示牌
+ 2.修改【告示牌登录.json】配置文件中的“创建告示牌的内容”
+ 3.输入指令:/gs r
+ 3.输入指令:/gs r [权限:signinsign.setup]

## 更新日志
```
1.0.4
加入了对放置区域墙壁是否为空的判定
降低插件放置告示牌的优先级(避让CreateSpawn插件)
给/gs s指令加个权限方便玩家自用
把点击告示牌执行命令的身份改为玩家本人(临时超管组)
使用/gs r会清空传送坐标 避免重置服务器沿用
1.0.3
少司命修复了多人进服告示牌不弹窗问题,加入了阻止破坏修改告示牌图格
羽学优化了指令,使用/gs s可快速设置当前位置为传送点,使用/gs r 可重设告示牌(自动执行/reload)
Expand All @@ -28,7 +35,7 @@
| 语法 | 权限 | 说明 |
| -------------- | :-----------------: | :------: |
| /gs r | signinsign.setup | 重设告示牌 |
| /gs s | signinsign.setup |设置告示牌传送点并自动写入配置文件|
| /gs s | signinsign.tp |设置告示牌传送点并自动写入配置文件|
|| sign.edit |允许破坏告示牌权限|


Expand All @@ -41,7 +48,7 @@
"对登录玩家显示告示牌": true,
"是否允许点击告示牌": true,
"点击告示牌是否发广播": false,
"创建告示牌的内容,重设指令:/gs r": "欢迎来到开荒服\n本服支持连锁挖矿,更多晶塔放置使用\nNPC售卖更多物品,更多材料微光转换\n更有RPG职业商店与魔改BOSS等你体验!\n并配备了在线礼包,进度礼包等福利助你快速成长\n需导出本服角色/地图可加群联系服主\n服务器群:123456\n\n编辑此处输入密码(保存2次)可快速注册登录:\n",
"创建告示牌的内容,重设指令:/gs r": "欢迎来到开荒服!!\n本服支持PE/PC跨平台联机游玩\n每25分钟清理世界与Boss战排名统计\n更多指令教学请输入/help\n点击告示牌可进行传送\n\nTShock官方群:816771079\n",
"点击告示牌的广播/仅使用者可见": "在本告示牌依序输入2次:\n[c/F7CCF0:123456] 进行注册登录。",
"试图破坏告示牌的广播": "此告示牌不可被修改!",
"点击告示牌执行什么指令": [],
Expand Down
46 changes: 30 additions & 16 deletions SignInSign/SignInSign.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class SignInSign : TerrariaPlugin
public override string Name => "告示牌登录 SignInSign";
public override string Description => "告示牌登录交互插件 支持进服弹窗!";
public override string Author => "Soofa 羽学 少司命";
public override Version Version => new(1, 0, 3);
public override Version Version => new(1, 0, 4);

#endregion

Expand All @@ -27,9 +27,9 @@ public SignInSign(Main game) : base(game) { }
public override void Initialize()
{
LoadConfig();
TShockAPI.Commands.ChatCommands.Add(new TShockAPI.Command("signinsign.setup", Command.SetupCmd, "setupsign", "gs", "告示"));
TShockAPI.Commands.ChatCommands.Add(new TShockAPI.Command(Command.SetupCmd, "setupsign", "gs", "告示"));
ServerApi.Hooks.NetGreetPlayer.Register(this, OnNetGreetPlayer);
ServerApi.Hooks.GamePostInitialize.Register(this, OnGamePostInitialize);
ServerApi.Hooks.GamePostInitialize.Register(this, OnGamePostInitialize,-100); //优先级为倒数100 避免和CreateSpawn、SpawnInfra冲突
GetDataHandlers.TileEdit.Register(OnEdit);
GetDataHandlers.Sign.Register(OnSignChange);
GetDataHandlers.SignRead.Register(OnSignRead);
Expand Down Expand Up @@ -159,45 +159,59 @@ public static void OnSignChange(object? sender, GetDataHandlers.SignEventArgs ar
public static void OnSignRead(object? sender, GetDataHandlers.SignReadEventArgs args)
{
//当是否允许点击告示牌为false,则返回不做任何处理
if (args.Player == null || Config.SignEnable2 == false) { args.Handled = true; }
if (args.Player == null || Config.SignEnable2 == false || !args.Player.IsLoggedIn) args.Handled = true;

//否则
else
{
if (Config.SignEnable3 == true)
{
args.Player!.SendMessage($"{Config.SignText2}", color: Microsoft.Xna.Framework.Color.Yellow);
}

// 从配置中读取CommandsOnSignRead列表,并依次执行每个命令
foreach (var command in Config.CommandsOnSignRead)
{
// 执行命令,这里使用TSPlayer.Server执行命令意味着由服务器执行
Commands.HandleCommand(TSPlayer.Server, command);
}
//执行指令方法
Cmd(args.Player);

//遍历配置文件中的BUFFID,点击设置BUFF
foreach (var BuffID in Config.BuffID)
{
args.Player.SetBuff(BuffID, Config.BuffTime * 3600, false);
}

//遍历配置文件中的物品ID,点击给予物品
foreach (var ItemID in Config.ItemID)
{
args.Player.GiveItem(ItemID, Config.ItemStack, 0);
}

//当点击告示牌是否传送为true,将玩家传送到指定坐标(仅对已登录玩家有效)
if (Config.Teleport == true || args.Player.IsLoggedIn)
if (Config.Teleport == true)
{
if (Config.Teleport_X <= 0 || Config.Teleport_Y <= 0)
{
args.Player!.SendMessage($"[告示牌登录]请使用 [c/F25E61:/gs s] 设置传送坐标,当前坐标为:{Config.Teleport_X},{Config.Teleport_Y}", color: Microsoft.Xna.Framework.Color.Yellow);
args.Player!.SendMessage($"[告示牌登录]请使用 [c/F25E61:/gs s] 设置传送坐标,当前坐标为:{Config.Teleport_X},{Config.Teleport_Y} \n" +
$"指令 [c/F25E61:/gs s] 的权限名为:signinsign.tp", color: Microsoft.Xna.Framework.Color.Yellow);
}
else { args.Player.Teleport(x: Config.Teleport_X * 16, y: Config.Teleport_Y * 16, style: Config.Style); }
else args.Player.Teleport(x: Config.Teleport_X * 16, y: Config.Teleport_Y * 16, style: Config.Style);
}
}
}
#endregion

#region 用超管组身份帮玩家执行指令方法
private static void Cmd(TSPlayer plr)
{
Group group = plr.Group;
try
{
plr.Group = new SuperAdminGroup();
foreach (var cmd in Config.CmdList)
{
Commands.HandleCommand(plr, cmd);
}
}
finally
{
plr.Group = group;
}
}
#endregion

}
11 changes: 7 additions & 4 deletions SignInSign/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ public static int GetSignIdByPos(int tileX, int tileY)
public static int SpawnSign(int x, int y)
{
WorldGen.KillTile(x, y);
Main.tile[Main.spawnTileX, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX, Main.spawnTileY - 2].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 2].wall = WallID.EchoWall;
if (Main.tile[x, y].wall == WallID.None) //检查墙壁是否为空,空则放置隐形墙
{
Main.tile[Main.spawnTileX, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX, Main.spawnTileY - 2].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 3].wall = WallID.EchoWall;
Main.tile[Main.spawnTileX + 1, Main.spawnTileY - 2].wall = WallID.EchoWall;
}

Main.tile[Main.spawnTileX, Main.spawnTileY - 3].active(false);
Main.tile[Main.spawnTileX, Main.spawnTileY - 2].active(false);
Expand Down
2 changes: 1 addition & 1 deletion SpawnInfra/Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void Initialize()
{
LoadConfig();
GeneralHooks.ReloadEvent += (_) => LoadConfig();
ServerApi.Hooks.GamePostInitialize.Register(this, OnGamePostInitialize);
ServerApi.Hooks.GamePostInitialize.Register(this, OnGamePostInitialize,20);//提高优先级避免覆盖CreateSpawn插件
Commands.ChatCommands.Add(new Command("room.use", Comds.Comd, "rm", "基建")
{
HelpText = "生成基础建设"
Expand Down
2 changes: 1 addition & 1 deletion SpawnInfra/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ v1.4.0
修正了刷怪场中心点为出生点X轴
修正了刷怪场比例缩放
给刷怪场放个花园侏儒
提高放置优先级避免覆盖CreateSpawn插件生成的建筑
v1.3.0
加入了微光湖直通车
Expand Down

0 comments on commit ae21a4c

Please sign in to comment.