Skip to content

Commit

Permalink
Merge pull request #16 from ACaiCat/caitest
Browse files Browse the repository at this point in the history
文档:优化Part3
  • Loading branch information
ACaiCat authored May 3, 2024
2 parents 44de1ae + 63f9393 commit e30e20c
Showing 1 changed file with 58 additions and 51 deletions.
109 changes: 58 additions & 51 deletions Document/Part3.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
## Part 3.添加新命令​
# Part 3.添加新命令​

本章你将学到:

- 如何在TShock插件中添加新命令
- 学会处理CommandArgs参数
- 学会卸载插件添加的命令

### 1.添加新的命令​
## 1.添加新的命令​

在Part 1中有提到,添加命令通常是在插件的初始化函数Initialize\(\)中添加的
- 在Part 1中有提到,添加命令通常是在插件的初始化函数Initialize\(\)中添加的
添加新命令的常用格式是这样的:


Expand All @@ -21,31 +21,31 @@ public override void Initialize()
}
```

当你输入代码后由于没有相应的函数\(Cmd\)会报错,
1. 当你输入代码后由于没有相应的回调函数\(Cmd\)会报错,

![1693031018827.png](Resourse/6548_6c32bc3b75ba47b75de5d0e8454077eb.png "1693031018827.png")


此时我们右键我们需要创建的函数名,然后选择快速操作和重构,
2. 此时我们右键我们需要创建的函数名,然后选择快速操作和重构,

![1693031109523.png](Resourse/6550_00e5e11c1dea7b3251a45234d6b7049b.png "1693031109523.png")

![1693031137344.png](Resourse/6551_10dbaf1730b53283d2d9308325613d65.png "1693031137344.png")


然后选择生成方法"Cmd"
3. 然后选择生成方法"Cmd"

![1693031140633.png](Resourse/6552_731767ebe266e2661580f8e2dddfab58.png "1693031140633.png")


此时Visual Studio就会自动帮我们创造一个回调函数
4. 此时Visual Studio就会自动帮我们创造一个回调函数

![1693031155598.png](Resourse/6553_3902012ccc306a62f201489074415937.png "1693031155598.png")


当然,此时这个函数没有任何功能,我们删去throw new NotImplementedException\(\);就可以开始编写命令功能了
5. 当然,此时这个函数没有任何功能,我们删去throw new NotImplementedException\(\);就可以开始编写命令功能了

### 2.命令的权限​
## 2.命令的权限​



Expand All @@ -62,14 +62,15 @@ private void Cmd(CommandArgs args)
}
```

上面的示例代码中,当玩家输入"/cmd2"命令并且拥有"mycommand"权限时,就会向玩家发送一条绿色的消息,内容为"你使用了cmd2命令\!",若玩家没有相应权限则会提示玩家无权执行该命令,并且日志会记录玩家试图执行命令的行为并发送给打开接受日志的玩家
- 上面的示例代码中,当玩家输入"/cmd2"命令并且拥有"mycommand"权限时,就会向玩家发送一条绿色的消息,内容为"你使用了cmd2命令\!"
- 若玩家没有相应权限则会提示玩家无权执行该命令,并且日志会记录玩家试图执行命令的行为并发送给打开接受日志的玩家

![1693039687698.png](Resourse/6564_3d9a7cf7f1e3beccc96808a4f7d6f58e.png "1693039687698.png")

![1693039745182.png](Resourse/6565_8e0ca1a530b0f77207513a5c2c08591b.png "1693039745182.png")


权限也可以设为无或者多个权限,如下代码可以添加3条分别为/cmd1\(无权限\)、/cmd2\(单权限\)、/cmd3\(多权限\)的命令
- 权限也可以设为无或者多个权限,如下代码可以添加3条分别为/cmd1\(无权限\)、/cmd2\(单权限\)、/cmd3\(多权限\)的命令



Expand All @@ -82,19 +83,25 @@ public override void Initialize()
}
```

执行上面的命令,都会调用"Cmd"函数,他们的区别在于权限,权限区别请见下表:
- 执行上面的命令,都会调用"Cmd"函数,他们的区别在于权限,权限区别请见下表:

<table style="width: 100%"><tbody><tr><td><span style="color: rgb(61, 142, 185)">/cmd1</span></td><td><span style="color: rgb(243, 121, 52)">无权限限制</span></td></tr><tr><td><span style="color: rgb(61, 142, 185)">/cmd2</span></td><td><span style="color: rgb(0, 0, 0)">玩家需要拥有</span><span style="color: rgb(243, 121, 52)">mycommand权限</span></td></tr><tr><td><span style="color: rgb(61, 142, 185)">/cmd3</span></td><td>玩家需要拥有<span style="color: rgb(243, 121, 52)">mycommand</span><span style="color: rgb(226, 80, 65)"><span style="font-size: 22px">或者</span></span><span style="color: rgb(243, 121, 52)">mycommand2权限</span></td></tr></tbody></table>
| 命令 | 权限 |
| --- | --- |
| /cmd1 | 无权限限制 |
| /cmd2 | 玩家需要拥有mycommand权限 |
| /cmd3 | 玩家需要拥有mycommand或者mycommand2权限 |

注: 像/cmd3类似的多权限命令,只要玩家拥有命令中设置的任何一个权限,玩家就可以执行对应的命令
\*权限的命名
权限的命名是需要遵循一定的命名规范的并_不能像上面代码中随便命名_
通常插件权限名字格式应为: 插件名.功能名\(例如: si.use\)
当然为了方便分类也可以使用: 插件名.功能.功能细分 \(例如: uban.playerban.admin\)

### 3.命令的别名​
>注: 像/cmd3类似的多权限命令,只要玩家拥有命令中设置的任何一个权限,玩家就可以执行对应的命令
有时候一个命令可以由两个名字对应,例如:/off和/exit他们属于同一个命令,/exit就是/off的别名
- 权限的命名
权限的命名是需要遵循一定的命名规范的并不能像上面代码中随便命名
- 通常插件权限名字格式应为: 插件名.功能名\(例如: si.use\)
- 当然为了方便分类也可以使用: 插件名.功能.功能细分 \(例如: uban.playerban.admin\)

## 3.命令的别名​

- 有时候一个命令可以由两个名字对应,例如:/off和/exit他们属于同一个命令,/exit就是/off的别名
我们可以通过下面的代码实现命令别名


Expand All @@ -110,9 +117,9 @@ private void Vme(CommandArgs args)
}
```

上述代码中,当玩家使用/vme50或者/v我50且有"cancanneed"权限,就会给予这个玩家50铂金币
此时"/v我50"就是"/vme50"的别名
同样即使你使用别名,你仍然可以使用那几个权限的重载,就像如下示例:
- 上述代码中,当玩家使用/vme50或者/v我50且有"cancanneed"权限,就会给予这个玩家50铂金币
- 此时"/v我50"就是"/vme50"的别名
- 同样即使你使用别名,你仍然可以使用那几个权限的重载,就像如下示例:



Expand All @@ -129,9 +136,9 @@ public override void Initialize()

![1693035434275.png](Resourse/6557_70095bfacb55c765abda613730e957cd.png "1693035434275.png")

### 4.命令的其他属性​
## 4.命令的其他属性​

TShock的命令还有4个属性,这些属性是AllowServer、DoLog、HelpDesc、HelpText,你可以使用new Command\(\)\{ 属性 = 值 \}来修改他们,也可以用如下方法一次修改多个属性
- TShock的命令还有4个属性,这些属性是AllowServer、DoLog、HelpDesc、HelpText,你可以使用new Command\(\)\{ 属性 = 值 \}来修改他们,也可以用如下方法一次修改多个属性



Expand All @@ -143,53 +150,53 @@ public override void Initialize()
}
```

#### AllowServer​
### AllowServer​

默认为true,AllowServer被设置为false时,非真实玩家\(服务器后台、REST远程命令\)无法使用这个命令
- 默认为true,AllowServer被设置为false时,非真实玩家\(服务器后台、REST远程命令\)无法使用这个命令

![1693033540226.png](Resourse/6554_be02d64dc1d2b9edfb6e38a3d1e52d5c.png "1693033540226.png")



#### DoLog​
### DoLog​

默认为true,当你设置为false时,服务器日志不会记录执行该命令的具体参数,只会记录命令名\(例如:使用命令/login 123456,只会记录/login\)
- 默认为true,当你设置为false时,服务器日志不会记录执行该命令的具体参数,只会记录命令名\(例如:使用命令/login 123456,只会记录/login\)

![1693034128151.png](Resourse/6555_cc0ab8905621296012c2bcc2f7309dba.png "1693034128151.png")



#### HelpDesc和HelpText​
### HelpDesc和HelpText​

HelpDesc的默认值为null,HelpText的默认值为No help available.\(在当前设置的语言有效时会被设为对应语言的翻译\)
这两者基本一样,都是命令帮助文档,使用/help 命令名可以查看
但是HelpDesc的优先级会更高,当命令的HelpDesc不为null时只会显示HelpDesc
- HelpDesc的默认值为null,HelpText的默认值为No help available.\(在当前设置的语言有效时会被设为对应语言的翻译\)
- 这两者基本一样,都是命令帮助文档,使用/help 命令名可以查看
- HelpDesc的优先级会更高,当命令的HelpDesc不为null时只会显示HelpDesc

![1693034557221.png](Resourse/6556_6607929faf39150ab769432b5d1c0810.png "1693034557221.png")
### 5.CommandArgs参数​

当玩家执行我们添加的命令时,服务器会把一些相关的信息"打包"传给我们的回调函数,这些信息就是CommandArgs
- 当玩家执行我们添加的命令时,服务器会把一些相关的信息"打包"传给我们的回调函数,这些信息就是CommandArgs

![1693039291623.png](Resourse/6561_c9c245aadefc2a6c8156d03fd3549776.png "1693039291623.png")


它包含Message、Player\(重要\)、TPlayer、Silent、Parameters\(重要\)
- **它包含Message、Player\(重要\)、TPlayer、Silent、Parameters\(重要\)**

![1693039336869.png](Resourse/6562_b64bc64c512db4b5338b2f6030ba72e1.png "1693039336869.png")


#### Parameters​
### Parameters​

当你输入含有参数的命令时,TShock会把命令分割成Parameters
- 当你输入含有参数的命令时,TShock会把命令分割成Parameters

#### Parameters是命令的参数,类型为字符串列表​
### Parameters是命令的参数,类型为字符串列表​



![1693039353193.png](Resourse/6563_469e6a235aae830377124bf3608524ab.png "1693039353193.png")


你可以使用switch-case结构实现子命令功能,示例如下:
>你可以使用switch-case结构实现子命令功能,示例如下:


Expand Down Expand Up @@ -283,9 +290,9 @@ private void CommandHandler(CommandArgs args)



#### Player​
### Player​

执行命令的玩家的TSPlayer对象,通常可以对其进行以下操作:
- 执行命令的玩家的TSPlayer对象,通常可以对其进行以下操作:



Expand All @@ -306,26 +313,26 @@ args.Player.Disconnect("这是一个断开信息"); //断开玩家的连接(断
```


#### TPlayer​
### TPlayer​

Player对象,即Terraria原版玩家对象,此处不讲解
- Player对象,即Terraria原版玩家对象,此处不讲解

#### Silent​
### Silent​

是否为静默执行,
当玩家使用CommandSpecifier\(默认为/\)为命令起始符时Silent为false
当玩家使用CommandSilentSpecifier\(默认为.\)为命令起始符时Silent为true
静默执行取决于命令是否写了静默执行的逻辑,如果没有,那么静默执行和正常执行没有任何区别
- 是否为静默执行
- 静默执行取决于命令是否写了静默执行的逻辑,如果没有,那么静默执行和正常执行没有任何区别
> - 当玩家使用CommandSpecifier\(默认为/\)为命令起始符时Silent为false
>- 当玩家使用CommandSilentSpecifier\(默认为.\)为命令起始符时Silent为true
#### Message​
### Message​

原消息,例如:你执行了/kick Cai 傻逼,那么Message的值就是"kick Cai 傻逼"
- 原消息,例如:你执行了/kick Cai 傻逼,那么Message的值就是"kick Cai 傻逼"
由于Parameters的存在


### 5.卸载你添加的命令​

使用下面的代码就可以卸载本插件添加的所有命令
- 使用下面的代码就可以卸载本插件添加的所有命令



Expand Down

0 comments on commit e30e20c

Please sign in to comment.