正在加载文档
字符串变量扩展键值对
<!-- mindoc:slug=aa-1hglonries50c -->
## 初始化变量命令:
>INITSTRVALUE 参数1
### 参数说明:
|位置|说明|备注|
|:----|:---|:---
|参数1 |变量名|支持A S T W Z变量(Z变量跨天不需要重新申明),S变量 `(不支持S$自由变量)`|
### 重要说明:
>1. 为了执行提高效率,我们用到了缓存,需要用这个命令明确指定该变量是作为键值对使用的.这个是跟996引擎有区别的地方
2. 如果是A变量(全局类型的),需要在M2启动触发中,调用该命令初始化,如果是S\T(个人变量),我们需要在人物上线触发的地方调用该命令初始化
3. 只要是变量有值,后面需要用键值类型来使用,就需要调用此命令初始化
4. 建议:少用常量`<$GETSTRVALUE(变量,KEY键)>`耗时高,多用`GETSTRVALUE`获取键值内容
### 常量支持:
> <$GETSTRVALUE(变量,KEY键)>
例如:
`ADDSTRVALUE T10 游戏名字 热血传奇`
`SENDMSG 5 游戏名字=<$GETSTRVALUE(T10,游戏名字)>`
`结果:游戏名字=热血传奇`
> <$GETSTRKEY(变量,位置)>
取排名序号位置Key键名字 位置等于键值key键位置1-X
> <$GETSORTSTRVALUE(变量,位置)>
取排名序号位置内容 位置等于键值key键位置1-X
## 增加(修改)键值命令:
>ADDSTRVALUE 参数1 参数2 参数3
### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------ |:------------- |
|参数1| 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
|参数2| 键 | |
|参数3| 值| |
## 获取指定键值命令:
>GETSTRVALUE 参数1 参数2 参数3
### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------ |:------------- |
|参数1| 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
|参数2| 键 | |
|参数3| 输出变量名| 结果写入该变量 |
## 删除键值命令:
>DELSTRVALUE 参数1 参数2
### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------ |:------------- |
|参数1| 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
|参数2| 键 | |
## 获取所有键命令:
>GETSTRKEY 参数1 参数2
### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------ |:------------- |
|参数1| 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
|参数2| 输出变量名| 结果写入该变量 |
`该命令可以配合分割字符串命令SplitString使用`
### 常量支持:
> <$GETSTRVALUE(参数1,参数2)>
#### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------ |:--------------- |
| 参数1 | 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
| 参数2 | 键 | 支持变量中取值 |
### 示例:
```
[@测试变量键值对]
#IF
#ACT
; 第一个参数 支持变量,下面所有命令都是,但是只支持一层(不能嵌套)
MOV T1 1=999,2=888,3=777,4=555
MOV S$测试 T1
INITSTRVALUE <$STR(S$测试)> ; 初始化T1变量为键值存储
SENDMSG 6 原始T1:<$STR(T1)>
MOV T10 1=999,2=888,3=777
INITSTRVALUE T10 ; 初始化T10变量为键值存储
SENDMSG 6 原始T10:<$STR(T10)>
ADDSTRVALUE T10 4 666 ; 增加T10 键:4 值:666
SENDMSG 6 增加键值后T10:<$STR(T10)>
ADDSTRVALUE T10 4 aaa ; 设置T10 键:4 值:aaa
SENDMSG 6 增加键值后T10:<$STR(T10)>
GETSTRVALUE T10 3 S1 ; 获取T10中键=3的值 放入S1
SENDMSG 6 T10中键3的值为:<$STR(S1)>
DELSTRVALUE T10 1 ; 删除T10中键=1的键值对
SENDMSG 6 删除键值后T10:<$STR(T10)>
GETSTRKEY T10 S1 ; 获取所有键
SENDMSG 6 T10中所有键为:<$STR(S1)>
MOV S$测试1 T10
MOV S$测试2 2
sendmsg 7 第一次测试常量:<$GETSTRVALUE(<$STR(S$测试1)>,<$STR(S$测试2)>)>
sendmsg 7 第二次测试常量:<$GETSTRVALUE(T10,2)>
break
```
## 键值排序功能:
>SORTVARSTR 参数1 参数2 参数3 参数4
### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------------- |:------------------------ |
| 参数1 | 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
| 参数2 | 排序保留数量 | 最大填100,超过100保留100 |
| 参数3 | 排序方式(0/1) | 0:从小到大 1: 从大到小 |
| 参数4 | 排序权重值 | 0:小的权重值优先 1: 大的权重值优先 |
`参数4可理解为,按捐献同等数量的情况下是让先捐献的排上面,还是后捐献的排上面
`键值对排序格式:玩家名字=捐献数量#时间戳`
### 常量支持:
> <$GETSTRKEY(参数1,参数2)> 取键
> <$GETSORTSTRVALUE(参数1,参数2)> 取值
### 参数说明:
| 位置 | 说明 | 备注 |
|:----- |:------ |:--------------- |
| 参数1 | 变量名 | 支持A S T W Z变量,S变量 `(不支持S$自由变量)`|
| 参数2 | 第几个 | 从1开始 |
### 示例:
```
[@测试排序]
#IF
CHECKLEVELEX > 0
#ACT
MOV T10 A=999,B=888,C=777,D=666,E=555
INITSTRVALUE T10
SORTVARSTR T10 3 0 0
SENDMSG 5 排序1:<$STR(T10)>
MOV T10 A=999,B=888,C=777,D=666,E=555
INITSTRVALUE T10
SORTVARSTR T10 3 1 0
SENDMSG 5 排序2:<$STR(T10)>
MOV T10 A=999,B=888#22,C=888#11,D=666,E=555
INITSTRVALUE T10
SORTVARSTR T10 3 1 0
SENDMSG 5 排序3:<$STR(T10)>
sendmsg 5 第一名:<$GETSTRKEY(T10,1)>。值:<$GETSORTSTRVALUE(T10,1)>
sendmsg 5 第二名:<$GETSTRKEY(T10,2)>。值:<$GETSORTSTRVALUE(T10,2)>
sendmsg 5 第三名:<$GETSTRKEY(T10,3)>。值:<$GETSORTSTRVALUE(T10,3)>
MOV T10 A=999,B=888#22,C=888#11,D=666,E=555
INITSTRVALUE T10
SORTVARSTR T10 3 1 1
SENDMSG 5 排序4:<$STR(T10)>
sendmsg 6 第一名:<$GETSTRKEY(T10,1)>。值:<$GETSORTSTRVALUE(T10,1)>
sendmsg 6 第二名:<$GETSTRKEY(T10,2)>。值:<$GETSORTSTRVALUE(T10,2)>
sendmsg 6 第三名:<$GETSTRKEY(T10,3)>。值:<$GETSORTSTRVALUE(T10,3)>
Break
```