Add cn translations

This commit is contained in:
2023-07-23 00:25:42 +03:00
parent d76262fc43
commit 9e1017609c
11 changed files with 562 additions and 0 deletions

174
docs/cn/plugins/classes.md Normal file
View File

@@ -0,0 +1,174 @@
# 传递的类
## 值得一读
1. 什么是“*args”和“**kwargs” -> [habr上的文章 ↗](https://habr.com/ru/companies/ruvds/articles/482464/)
## KuiToi
_`kt = KuiToi("PluginName"")`_
### kt.log
_常量_\
返回预配置的记录器
### kt.name
_常量_\
返回插件名称
### kt.dir
_常量_\
返回插件文件夹
### kt.open()
_与open()参数相同_\
在kt.dir中打开文件
### kt.register_event(event_name: str, event_func: function)
_`event_name: str` -> 作为`event_func`调用的事件名称._\
_`event_func: function` -> 要调用的函数._
`event_func`可以传递普通函数或async - 不需要提前进行await。\
您也可以创建自己的事件,并使用自己的名称注册任意数量的事件。
### kt.call_event(event_name: str, *args, **kwargs) -> list:
_`event_name: str` -> 要调用的事件名称._\
_`*args, **kwargs` -> 要传递给函数的参数._
### **async** kt.call_async_event(event_name: str, *args, **kwargs) -> list:
_`event_name: str` -> 要调用的事件名称._\
_`*args, **kwargs` -> 要传递给函数的参数._\
_需要用`await`调用_
###### _建议阅读*args, **kwargs链接在开头_
所有事件的数据都以以下格式传递:`{"event_name": event_name, "args": args, "kwargs": kwargs}`\
`args: list` -> 表示传递到事件中的数据数组\
`kwargs: dict` -> 表示传递到事件中的数据字典
数据将以数组形式从所有成功的波动中返回。
### kt.call_lua_event(event_name: str, *args) -> list:
_`event_name: str` -> 要调用的事件名称._\
_`*args` -> 要传递给函数的参数._
添加用于向后兼容性。\
lua函数使用直接传递参数`lua_func(*args)`进行调用。
### kt.get_player([pid: int], [nick: str]) -> Player | None:
_`pid: int` -> Player ID - 玩家标识符._\
_`nick: str` -> Player Nick - 玩家昵称._
该方法通过其`pid``nick`返回玩家对象。\
如果无法找到玩家,则返回 `None`
### kt.get_players() -> List[Player] | list:
该方法返回所有玩家的数组。\
如果没有玩家,则数组将为空。
### kt.players_counter() -> int:
该方法返回在线的玩家数量。
### kt.is_player_connected([pid: int], [nick: str]) -> bool:
_`pid: int` -> Player ID - 玩家标识符._\
_`nick: str` -> Player Nick - 玩家昵称._
该方法通过其`pid``nick`返回玩家对象。
## Player (或 Client)
_`pl = kt.get_player()`_\
_`pl = event_data['kwargs']['player']`_
### pl.log -> Logger
_常量_\
返回预配置的记录器
### pl.addr -> str
_常量_\
返回玩家的 IP 地址
### pl.pid -> int
### pl.cid -> int
_常量_\
返回客户端的 ID _(pid: PlayerId = cid: ClientId)_
### pl.key -> str
_常量_\
返回在身份验证期间传递的密钥
### pl.nick -> str
_变量_\
从 BeamMP 服务器传递的昵称,可以更改,后果未知
### pl.roles -> str
_变量_\
从 BeamMP 服务器传递的角色,可以更改(如果设置了不正确的角色,可能会发生意外情况。)
### pl.guest -> bool
_常量_\
返回玩家是否为游客,从 BeamMP 服务器传递
### pl.identifiers -> dict
_常量_\
标识符,从 BeamMP 服务器传递。
### pl.ready -> bool
_常量由核心更改_\
返回布尔值,如果为 True-> 玩家已下载所有资源,在地图上加载
### pl.cars -> dict
_常量由核心更改_\
按类型返回汽车字典:
```python
{
1: {
"packet": car_packet,
"json": car_json,
"json_ok": bool(car_json),
"snowman": snowman,
"over_spawn": (snowman and allow_snowman) or over_spawn,
"pos": {
"pos":[0,0,0],
"rvel":[0,0,0],
"rot":[0,0,0],
"vel":[0,0,0],
"tim":0,
"ping":0
}
},
2: ...
}
```
其中 `1` - car_id\
其中 `pkt` - 未处理的从客户端收到的数据包(仅供非常有经验的用户使用)\
其中 `json` - 以 dict 形式存储的已处理的数据包\
其中 `json_ok` - 核心是否能够处理数据包\
其中 `snowman` - 车辆是否为雪人\
其中 `over_spawn` - 车辆是否超过了生成限制(通过插件允许)\
其中 `pos` - 车辆位置(通过 UDP 传递)
### pl.last_position -> dict
_常量由核心更改_
返回玩家的最后位置
### **async** pl.kick([reason: str = "Kicked!"]) -> None
_`reason: str` -> 踢出理由,参数可选,默认值为 `Kicked!`_
将玩家踢出服务器
### **async** pl.send_message(message: str, [to_all: bool = True]) -> None
_`message: str` -> 消息文本,不带 "Server:"_
_`to_all: bool` -> 是否向所有人发送此消息?参数可选,默认值为 `True`_
向玩家或所有人发送消息
### **async** pl.send_event(event_name: str, event_data: Any, [to_all: bool = True]) -> None
_`event_name: str` -> 要调用的事件名称_
_`event_data: Any` -> 发送到事件的数据。_
_`to_all: bool` -> 是否向所有人发送此消息?参数可选,默认值为 `True`_
将事件发送到客户端。\
如果 event_data 是 tuple、list、dict则核心会通过 json.dumps(event_data) 将其转换为 json然后再发送。\
否则,数据将是字符串,不受限制;
### **async** pl.delete_car(self, car_id: int) -> None
_`car_id: int` -> 要删除的车辆的 ID_
删除玩家的车辆

View File

@@ -0,0 +1,3 @@
# 所有可用事件列表
大多数事件将包含`pl = data ['kwargs'] ['player']`,可以在[这里](./classes.md)找到描述。

View File

@@ -0,0 +1,37 @@
import json
try:
import KuiToi
except ImportError:
pass
kt = KuiToi("Example")
log = kt.log
config = {"config_version": 0.1, "sql": {"enabled": False, "host": "127.0.0.1", "port": 3363, "database": "fucklua"}}
cfg_file = "config.json"
async def my_event_handler(event_data):
log.info(f"{event_data}")
async def load():
# Инициализация плагина
with open(cfg_file, 'w') as f:
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
log.info("Плагин загружен успешно.")
async def start():
# Запуск процессов плагина
await ev.call_async_event("my_event")
await ev.call_async_event("my_event", "Some data", data="some data too")
log.info("Плагин запустился успешно.")
async def unload():
# Код завершающий все процессы
log.info("Плагин выгружен успешно.")

View File

@@ -0,0 +1,37 @@
import json
try:
import KuiToi
except ImportError:
pass
kt = KuiToi("Example")
log = kt.log
config = {"config_version": 0.1, "sql": {"enabled": False, "host": "127.0.0.1", "port": 3363, "database": "fucklua"}}
cfg_file = "config.json"
def my_event_handler(event_data):
log.info(f"{event_data}")
def load():
# Инициализация плагина
with open(cfg_file, 'w') as f:
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
log.info("Плагин загружен успешно.")
def start():
# Запуск процессов плагина
ev.call_event("my_event")
ev.call_event("my_event", "Some data", data="some data too")
log.info("Плагин запустился успешно.")
def unload():
# Код завершающий все процессы
log.info("Плагин выгружен успешно.")

View File

@@ -0,0 +1,27 @@
print("example.lua")
--CreateTimer Testing
local mytimer = MP.CreateTimer()
--.--.--.--.--.--.--.
--GetOSName Testing
print("OS Name: "..MP.GetOSName())
--.--.--.--.--.--.-
--GetServerVersion Testing
local major, minor, patch = MP.GetServerVersion()
print("Server Version: "..major.."."..minor.."."..patch)
--.--.--.--.--.--.--.--.--
--Events Testing--
function handleChat(player_id, player_name, message)
print("Lua handleChat:", player_id, player_name, message, "; Uptime: "..mytimer:GetCurrent())
return 1
end
MP.RegisterEvent("onChatMessage", "handleChat")
--.--.--.--.--.--.
function onInit()
print("Initializing ready!")
end

View File

@@ -0,0 +1,35 @@
# BeamMP Lua反馈支持
KiuToi几乎完全支持BeamMP的lua插件所有必要的方法都已经创建测试显示以下细节
在KiuToi中没有支持:`MP.Set()`
#### Economic Rework V2.0付费DiscordRU[Hlebushek](https://discordapp.com/users/449634697593749516)
1. 要获取`pluginPath`,需要:`debug.getinfo(1).source:gsub("\\","/")` => `debug.getinfo(1).source:gsub("\\","/"):gsub("@", "")`,因为路径返回值中包含`@`,这破坏了插件。
#### Cobalt Essentials V1.7.5(免费,[github ↗](https://github.com/prestonelam2003/CobaltEssentials/)
1. 要获取`pluginPath`,需要:`debug.getinfo(1).source:gsub("\\","/")` => `debug.getinfo(1).source:gsub("\\","/"):gsub("@", "")`,因为路径返回值中包含`@`,这破坏了插件。
2. 必须将所有的`require()`移动到`onInit`之后。
3. 在某些情况下,必须在函数声明之后注册`MP.RegisterEvent`,即:
```lua
--这样不正确,可能无法注册
MP.RegisterEvent("onPlayerAuth","onPlayerAuth")
function onPlayerAuth(name, role, isGuest)
-- Some plugin code
end
--这样就可以了
MP.RegisterEvent("onPlayerAuth","onPlayerAuth")
```
### 工作原理
插件加载经过几个阶段:
1. 扫描`plugins/`文件夹
2. 如果文件夹不在PyPlugins中并且文件夹中存在`*.lua`,则添加它,例如`plugins/LuaPlugin`
3. 然后从该文件夹中进行`lua.loadfile({filename})`这是lua中的标准方法
4. 最后调用事件和函数`onInit()`
5. 如果在执行`onInit()`期间没有发生错误,则可以通过`lua_plugins`命令看到这样的消息:`Lua plugins: LuaPlugin:ok`

97
docs/cn/plugins/readme.md Normal file
View File

@@ -0,0 +1,97 @@
# 插件系统
### 事件:[这里](./events_list.md)
### 类:[这里](./classes.md)
## 使用带有“Dummy”的库
###### 这意味着它没有服务器无法工作但IDE将指导API
###### (库还在开发中)
* 使用pip\
`$ pip install KuiToi`
* 从源代码安装:\
`git clone https://github.com/KuiToi/KuiToi-PyLib`
## 示例
```python
try:
import KuiToi
except ImportError:
pass
kt = KuiToi("ExamplePlugin")
log = kt.log
def my_event_handler(event_data):
log.info(f"{event_data}")
def load():
# 初始化插件
ev.register_event("my_event", my_event_handler)
log.info("插件已成功加载。")
def start():
# 启动插件进程
ev.call_event("my_event")
ev.call_event("my_event", "一些数据", data="一些数据也是")
log.info("插件已成功启动。")
def unload():
# 结束所有进程的代码
log.info("插件已成功卸载。")
```
您还可以在[example.py](examples/example.py)中找到更广泛的示例。
* 建议在`load()`后使用`open()`,否则应使用`kt.load()`-在`plugin/<plugin_name>/<filename>`文件夹中创建一个文件
* 创建自己的事件:`kt.register_event("my_event", my_event_function)`-
* 调用事件:`kt.call_event("my_event")`
* 使用数据调用事件:`kt.call_event("my_event", data, data2=data2)`
* 基本事件_稍后会写_
## 异步函数
支持async
```python
try:
import KuiToi
except ImportError:
pass
kt = KuiToi("Example")
log = kt.log
async def my_event_handler(event_data):
log.info(f"{event_data}")
async def load():
# 初始化插件
ev.register_event("my_event", my_event_handler)
log.info("插件已成功加载。")
async def start():
# 启动插件进程
await ev.call_async_event("my_event")
await ev.call_async_event("my_event", "一些数据", data="一些数据也是")
log.info("插件已成功启动。")
async def unload():
# 结束所有进程的代码
log.info("插件已成功卸载。")
```
您还可以在[async_example.py](examples/async_example.py)中找到更广泛的示例。
* 创建自己的事件:`kt.register_event("my_event", my_event_function)`在register_event中检查函数
* 调用async事件`kt.call_async_event("my_event")`
* 使用数据调用async事件`kt.call_async_event("my_event", data, data2=data2)`
* 基本的async事件_稍后会写_