字符型变量的 键值对 操作方法


格式:ADDSTRVALUE 参数1 参数2 参数3

参数1:字符型变量 (A变量 T变量 S变量)  如果是自定义字符型变量 格式为:HUMAN(XXX)  不要带<$> 但是要带HUMAN、GLOBAL GUILD

参数2:主键值

参数3:对应值


写入例子:
[@main]
#IF
#ACT
MOV  T10   1=999,2=888,3=777

增加例子:
[@main]
#IF
#ACT
ADDSTRVALUE T10 4 996M2
 

修改例子:
[@main]
#IF
#ACT
ADDSTRVALUE T10 1 996M2.COM

获取字符串主键值 对应值:

格式:GETSTRVALUE 参数1 参数2 参数3

参数1:字符型变量 (A变量 T变量 S变量)  如果是自定义字符型变量 格式为:HUMAN(XXX)  不要带<$> 但是要带HUMAN、GLOBAL GUILD(注意自定义变量需要保存)

参数2:主键值

参数3:存入变量

 

例子:
[@获取主键值对应值]
#IF
#ACT
GETSTRVALUE T10 1 S10
SENDMSG 6 获取出来的为:<$STR(S10)>

删除字符型变量主键值:

DELSTRVALUE 参数1 参数2

参数1:字符型变量 (A变量 T变量 S变量)  如果是自定义字符型变量 格式为:HUMAN(XXX)  不要带<$> 但是要带HUMAN、GLOBAL GUILD(注意自定义变量需要保存)

参数2:主键值

 

例子:
[@删除主键值]
#IF
#ACT
DELSTRVALUE T10 1



键值对获取全部主键命令
GETSTRKEY 参数1 参数2
参数1:键值对变量名称
参数2:存入变量

//例子
#if
#ACT
movT11=2,2=1,996=2,引擎=3
GETSTRKEY T1 S1
;取出主键值为逗号分割(1,2,996,引擎)
sendmsg 7 <$str(S1)>
;搭配分割有神奇的功效
MOV N11 0
GETVALIDSTRSUPER <$str(S1)> , S$获取主键值 N$总主键数量
while N11 < <$str(N$总主键数量)>
INC N11 1

sendmsg 7 <$str(S$获取主键值<$str(N11)>)>
endwhile


新增键值对取主键对应的值为常量
[@main]
#IF
#ACT
mov  T1  1=996M2,2=996M2.COM
sendmsg 7 <$GETSTRVALUE(T1,1)>,<$GETSTRVALUE(T1,2)>.


功能:修改键值对主键
命令:格式SETSTRVALUEKEY 变量名称 原主键 新主键
示例:
[@main]
#if
#ACT
movT11=2,2=1,996=2,引擎=3

#if
#ACT
;修改主键“引擎”为“M2”
SETSTRVALUEKEY T1 引擎 M2< BR>SENDMSG6<$STR(T1)>打印值:1=2,2=1,996=2,M2=3


新读取指定CSV的2列内容以键值对的方式写入到变量

NEWREADCSVSAVEVAR 参数1 参数2 参数3 参数4 参数5
参数1:CSV所在路径
参数2:读取数据的起始行
参数3:主键所在列
参数4:值所在列
参数5:保存的变量(只支持字符型变量)

注:数据以列的形式存放在CSV中,主键和值不能同时空行,同时空行即表示读取结束
注:主键为空,值不为空时,忽略该行,主键不为空,值为空时会写入空值。


[@main]
#IF
#ACT
MOV T10
NEWREADCSVSAVEVAR ..\QuestDiary\test.csv 10 1 2 T10
sendmsg 6 <$STR(T10)>
sendmsg 7 <$GETSTRVALUE(T10,10)>,<$GETSTRVALUE(T10,11)>.




键值对排序

功能:键值对排序
命令:SORTVARSTR 参数1 参数2 参数3
参数1:变量名称(如:A1)
参数2:排序数量(1-100,如前10名填10,最多支持排序100组键值)
参数3:0/1(升序/降序)
参数4:0/1(0:小于时间戳优先,1:大于时间戳优先)
;注:参数4可理解为,按捐献同等数量的情况下是让先捐献的排上面,还是后捐献的排上面

键值对排序格式:玩家名字=捐献数量#时间戳
排序主键常量:<$GETSTRKEY(变量名,第几个)>
排序值常量:<$GETSORTSTRVALUE(变量名,第几个)>

 

;//示例
;重要说明:务必按照下方脚本逻辑进行编写脚本

[@main]
#if
#ACT
;赋值捐献的数量
MOV N$捐献数量 10000
;在总键值对中取出该玩家捐献的数量值
MOV N$捐献数量取出 <$GETSTRVALUE(A10,<$username>)>
;加上当前实际的捐献数量
INC N$捐献数量取出 <$str(N$捐献数量)>
;增加原有的基础键值数据
ADDSTRVALUE A10 <$username> <$str(N$捐献数量取出)>
;增加需要排序的变量键值数据
ADDSTRVALUE A11 <$username> <$str(N$捐献数量取出)>#<$UTCNOW>
;降序只排前6名按照大于时间戳优先
SORTVARSTR  A11 6 1 1
sendmsg 6 <$Str(A11)>                                         
sendmsg 6 排名第一名玩家名字:<$GETSTRKEY(A11,1)>。捐献数量:<$GETSORTSTRVALUE(A11,1)>
sendmsg 6 排名第二名玩家名字:<$GETSTRKEY(A11,2)>。捐献数量:<$GETSORTSTRVALUE(A11,2)>
sendmsg 6 排名第三名玩家名字:<$GETSTRKEY(A11,3)>。捐献数量:<$GETSORTSTRVALUE(A11,3)>
sendmsg 6 排名第四名玩家名字:<$GETSTRKEY(A11,4)>。捐献数量:<$GETSORTSTRVALUE(A11,4)>
sendmsg 6 排名第五名玩家名字:<$GETSTRKEY(A11,5)>。捐献数量:<$GETSORTSTRVALUE(A11,5)>
sendmsg 6 排名第六名玩家名字:<$GETSTRKEY(A11,6)>。捐献数量:<$GETSORTSTRVALUE(A11,6)>

;逻辑:我们将A10做为原始数据负责调用,用A11进行排序,这样需要排序的变量只会增加一个,从而达到高效率排序目的
;切记不要直接去排所有的变量,会造成卡顿,并且排序最多只支持100组键值