个人美工水平有限,所以做了个简易版本。
说说实现方式
先说淬炼:盛大支持淬炼格式如下。
1 1 生命值 +%u
2 1 躲避 %u
3 1 魔法躲避 %u%%
4 1 命中 %u
5 1 魔法命中 %u%%
6 2 攻击 %u-%u
7 2 道术 %u-%u
8 2 魔法 %u-%u
9 2 防御 %u-%u
10 2 魔法防御 %u-%u
11 1 幸运 +%u
12 1 吸血 +%u
13 1 无视物理防御 %u
14 1 无视魔法躲避 %u
15 1 无视物理躲避 %u
16 1 暴击等级 +%u
17 1 无视魔法防御 %u
18 1 抗性 +%u
19 1 双倍暴击 %u%%
20 1 韧性 +%u复制代码
第一个数字是ID,数据库中也是相对应的淬炼ID。第二个数字是代表需要的参数值,1 就是只读取第一个参数CL1VAL,2就是读取CL1val-CL2VAL的值。
技能是如何显示和实现的。
51 1 小火球 强化+%u
52 1 治疗术 强化+%u
53 1 初级剑法 强化+%u
54 1 精神战法 强化+%u
55 1 火炎刀 强化+%u
56 1 施毒术 强化+%u复制代码这是自定义的,放在客户端DB_CuiLianCfg.txt
第一个参数值代表技能ID。第二个参数值就是加强的系数。
比如51 在游戏中是怎么读取并且获得该装备的技能属性的呢。
$ITEMINFO[$STR(S50)].CLIAN1ATTRIB 为数据库的装备DB, - 50 就是技能Id啦,有了技能ID,就可以获得技能名称。
$USERMAGIC($STR(P62)).NAME 技能的名称
$HUMAN($USERMAGIC($STR(P62)).NAME) 当前技能具体是哪个技能根据装备自适应获得。技能的加强系数。
<div class="blockcode"><blockquote>[@淬炼属性]
{
;传入说明
#IF
EQUAL S50
#ACT
BREAK
#IFONE
EQUAL D87 3
#ACT
MOV P61 $ITEMINFO[$STR(S50)].CLIAN1ATTRIB
MOV P62 $ITEMINFO[$STR(S50)].CLIAN2ATTRIB
MOV P63 $ITEMINFO[$STR(S50)].CLIAN3ATTRIB
DEC P61 50
DEC P62 50
DEC P63 50
#ELSEACT
BREAK
#IF
LARGE $USERMAGIC($STR(P61)).LEVEL 0
CHECKVAR HUMAN $USERMAGIC($STR(P61)).NAME < 1
#ACT
CALCVAR HUMAN $USERMAGIC($STR(P61)).NAME = 1000
#IF
LARGE $USERMAGIC($STR(P62)).LEVEL 0
CHECKVAR HUMAN $USERMAGIC($STR(P62)).NAME < 1
#ACT
CALCVAR HUMAN $USERMAGIC($STR(P62)).NAME = 1000
#IF
LARGE $USERMAGIC($STR(P63)).LEVEL 0
CHECKVAR HUMAN $USERMAGIC($STR(P63)).NAME < 1
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
CALCVAR HUMAN $USERMAGIC($STR(P63)).NAME = 1000
#IF
LARGE P63 0
EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
#ACT
MOV P70 $ITEMINFO[$STR(S50)].CLIAN3ATTRIB
CALCVAR HUMAN 免伤属性 - $MULT.$STR(P70).3
SetProvisionalAbil 42 = $HUMAN(免伤属性)
#IF
LARGE P63 0
EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P70 $ITEMINFO[$STR(S50)].CLIAN3ATTRIB
CALCVAR HUMAN 免伤属性 - $MULT.$STR(P70).3
SetProvisionalAbil 42 = $HUMAN(免伤属性)
#IF
EQUAL D87 1
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 0
LARGE $USERMAGIC($STR(P61)).LEVEL 0
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN1VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P61)).NAME - $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P61)).NAME = $HUMAN($USERMAGIC($STR(P61)).NAME)
#IF
EQUAL D87 1
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 1
LARGE $USERMAGIC($STR(P62)).LEVEL 0
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN2VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P62)).NAME - $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P62)).NAME = $HUMAN($USERMAGIC($STR(P62)).NAME)
#IF
EQUAL D87 1
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
LARGE $USERMAGIC($STR(P63)).LEVEL 0
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P63)).NAME - $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P63)).NAME = $HUMAN($USERMAGIC($STR(P63)).NAME)
#IF
EQUAL D87 1
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 3
CALCVAR HUMAN 免伤属性 - $STR(P50)
SetProvisionalAbil 42 = $HUMAN(免伤属性)
#IF
EQUAL D87 1
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 3
CALCVAR HUMAN 免伤属性 - $STR(P50)
SetProvisionalAbil 42 = $HUMAN(免伤属性)
#IF
EQUAL D87 1
#ACT
BREAK
#IF
EQUAL D87 2
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 0
LARGE $USERMAGIC($STR(P61)).LEVEL 0
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN1VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P61)).NAME + $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P61)).NAME = $HUMAN($USERMAGIC($STR(P61)).NAME)
MOV S90 $USERMAGIC($STR(P61)).NAME
SENDMSG 7 佩戴:<$ITEMINFO[$STR(S50)].NAME>,<$STR(S90)>强化+<$ITEMINFO[$STR(S50)].CLIAN1VAL>...
#IF
EQUAL D87 2
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 1
LARGE $USERMAGIC($STR(P62)).LEVEL 0
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN2VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P62)).NAME + $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P62)).NAME = $HUMAN($USERMAGIC($STR(P62)).NAME)
MOV S90 $USERMAGIC($STR(P62)).NAME
SENDMSG 7 佩戴:<$ITEMINFO[$STR(S50)].NAME>,<$STR(S90)>强化+<$ITEMINFO[$STR(S50)].CLIAN2VAL>...
#IF
EQUAL D87 2
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
LARGE $USERMAGIC($STR(P63)).LEVEL 0
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P63)).NAME + $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P63)).NAME = $HUMAN($USERMAGIC($STR(P63)).NAME)
MOV S90 $USERMAGIC($STR(P63)).NAME
SENDMSG 7 佩戴:<$ITEMINFO[$STR(S50)].NAME>,<$STR(S90)>强化+<$ITEMINFO[$STR(S50)].CLIAN3VAL>...
BREAK
#IF
EQUAL D87 2
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 3
CALCVAR HUMAN 免伤属性 + $STR(P50)
SetProvisionalAbil 42 = $HUMAN(免伤属性)
SENDMSG 7 佩戴:<$ITEMINFO[$STR(S50)].NAME>,免伤强化+<$ITEMINFO[$STR(S50)].CLIAN3VAL>...
BREAK
#IF
EQUAL D87 3
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 3
CALCVAR HUMAN 免伤属性 + $STR(P50)
SetProvisionalAbil 42 = $HUMAN(免伤属性)
SENDMSG 7 佩戴:<$ITEMINFO[$STR(S50)].NAME>,免伤强化+<$ITEMINFO[$STR(S50)].CLIAN3VAL>...
BREAK
#IF
EQUAL D87 2
#ACT
BREAK
#IF
EQUAL D87 3
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 0
LARGE $USERMAGIC($STR(P61)).LEVEL 0
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN1VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P61)).NAME + $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P61)).NAME = $HUMAN($USERMAGIC($STR(P61)).NAME)
MOV S90 $USERMAGIC($STR(P61)).NAME
#IF
EQUAL D87 3
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 1
LARGE $USERMAGIC($STR(P62)).LEVEL 0
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN2VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P62)).NAME + $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P62)).NAME = $HUMAN($USERMAGIC($STR(P62)).NAME)
#IF
EQUAL D87 3
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
LARGE $USERMAGIC($STR(P63)).LEVEL 0
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
!EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 50
CALCVAR HUMAN $USERMAGIC($STR(P63)).NAME + $STR(P50)
SKILLPOWERPERMILL $USERMAGIC($STR(P63)).NAME = $HUMAN($USERMAGIC($STR(P63)).NAME)
BREAK
#IF
EQUAL D87 3
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
EQUAL $ITEMINFO[$STR(S50)].STDMODE 10
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 3
CALCVAR HUMAN 免伤属性 + $STR(P50)
SetProvisionalAbil 42 = $HUMAN(免伤属性)
BREAK
#IF
EQUAL D87 3
LARGE $ITEMINFO[$STR(S50)].ITEMEXT(87) 2
EQUAL $ITEMINFO[$STR(S50)].STDMODE 11
#ACT
MOV P50 $ITEMINFO[$STR(S50)].CLIAN3VAL
MULT P50 3
CALCVAR HUMAN 免伤属性 + $STR(P50)
SetProvisionalAbil 42 = $HUMAN(免伤属性)
BREAK
}
<font color="#ff0000">;以下脚本 和当前显示的功能无关,是另外一个功能。已经停用。</font>
[@符文属性]
{
#IF
RANDOM 1
#ACT
CALCVAR HUMAN 厄运几率 = 0
CALCVAR HUMAN 嗜血几率 = 0
CALCVAR HUMAN 魔窃几率 = 0
CALCVAR HUMAN 迷惑几率 = 0
CALCVAR HUMAN 共振几率 = 0
CALCVAR HUMAN 摧残几率 = 0
CALCVAR HUMAN 厄运基值 = 0
CALCVAR HUMAN 嗜血基值 = 0
CALCVAR HUMAN 魔窃基值 = 0
CALCVAR HUMAN 迷惑基值 = 0
CALCVAR HUMAN 摧残基值 = 0
CALCVAR HUMAN 连击次数 = 0
CALCVAR HUMAN 连击几率 = 0
MOV S0
#ELSEACT
BREAK
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(0)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(0)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(1)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(1)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(3)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(3)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(4)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(4)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(5)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(5)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(6)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(6)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(7)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(7)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(8)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(8)].JEWEL(3).NAME
INC S0 |
#IF
!EQUAL $ITEMINFO[$USEITEMMAKEINDEX(9)].JEWEL(3).NAME
#ACT
INC S0 $ITEMINFO[$USEITEMMAKEINDEX(9)].JEWEL(3).NAME
#IF
EQUAL S0
#ACT
BREAK
#ELSEACT
GOTO @BUFF循环
[@BUFF循环]
#IF
!POS $STR(S0) |
#ACT
MOV S1 $STR(S0)
MOV S0
REPLACETEXT S1 一 1
REPLACETEXT S1 二 2
REPLACETEXT S1 三 3
REPLACETEXT S1 四 4
REPLACETEXT S1 五 5
REPLACETEXT S1 六 6
REPLACETEXT S1 七 7
#IF
POS $STR(S0) |
#ACT
GETVALIDSTR $STR(S0) | S1 S2
MOV S0 $STR(S2)
REPLACETEXT S1 一 1
REPLACETEXT S1 二 2
REPLACETEXT S1 三 3
REPLACETEXT S1 四 4
REPLACETEXT S1 五 5
REPLACETEXT S1 六 6
REPLACETEXT S1 七 7
#IF
POS $STR(S1) 厄运符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $STR(P3)
GETVALIDSTR $STR(S4) | S4 S5
CALCVAR HUMAN 厄运几率 = $STR(S5)
CALCVAR HUMAN 厄运基值 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:摧残几率:<$HUMAN(厄运几率)>%,窃取生命值:<$HUMAN(厄运基值)>%-<$MULT.$HUMAN(厄运基值).2>%...
#IF
POS $STR(S1) 嗜血符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $INC.$STR(P3).10
GETVALIDSTR $STR(S4) | S4 S5
CALCVAR HUMAN 嗜血几率 = $STR(S5)
CALCVAR HUMAN 嗜血基值 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:摧残几率:<$HUMAN(嗜血几率)>%,窃取生命值:<$HUMAN(嗜血基值)>%-<$MULT.$HUMAN(嗜血基值).2>%...
#IF
POS $STR(S1) 魔窃符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $INC.$STR(P3).20
GETVALIDSTR $STR(S4) | S4 S5
CALCVAR HUMAN 魔窃几率 = $STR(S5)
CALCVAR HUMAN 魔窃基值 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:摧残几率:<$HUMAN(魔窃几率)>%,窃取魔法值:<$HUMAN(魔窃基值)>%-<$MULT.$HUMAN(魔窃基值).2>%...
#IF
POS $STR(S1) 迷惑符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $INC.$STR(P3).30
GETVALIDSTR $STR(S4) | S4 S5
CALCVAR HUMAN 迷惑几率 = $STR(S5)
CALCVAR HUMAN 迷惑基值 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:摧残几率:<$HUMAN(迷惑几率)>,禁止攻击时长:<$HUMAN(迷惑基值)>秒...
#IF
POS $STR(S1) 摧残符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $INC.$STR(P3).40
GETVALIDSTR $STR(S4) | S4 S5
CALCVAR HUMAN 摧残几率 = $STR(S5)
CALCVAR HUMAN 摧残基值 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:摧残几率:<$HUMAN(摧残几率)>,禁锢时长:<$HUMAN(摧残基值)>秒...
#IF
POS $STR(S1) 共振符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $INC.$STR(P3).50
CALCVAR HUMAN 共振几率 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:共振几率:<$HUMAN(共振几率)>%,对方生命值高于自身触发...
#IF
POS $STR(S1) 连击符
#ACT
COPYTEXT $STR(S1) 8 1 S3
MOV P3 $STR(S3)
SENDMSG 7
READRANDOMSTR ..\QuestDiary\数据文件\极品属性\符文几率.ini S4 $INC.$STR(P3).60
CALCVAR HUMAN 连击几率 = $STR(S4)
SENDMSG 6 [符文的力量伴随左右]:连击几率:<$HUMAN(连击几率)>%,造成3x3范围伤害,并造成恐惧特效...
#IF
!EQUAL S0
#ACT
CLEARVAR S1 5
GOTO @BUFF循环
#ELSEACT
SENDMSG 7 [轮回战神]:符文的力量已激活...
BREAK
}复制代码[@TAKEOFFALL]
#IFONE
EQUAL $PARAM(3) 0
EQUAL $PARAM(3) 1
#ACT
MOV D87 1
MOV S50 $USEITEMMAKEINDEX($PARAM(3))
#CALL [\游戏功能\穿戴装备.txt] @淬炼属性
复制代码[@TAKEONALL]
#ACT
MOV D87 2
MOV S50 $PARAM(2)
#CALL [\游戏功能\穿戴装备.txt] @淬炼属性
复制代码上面是关于技能淬炼的脚本
------------------------------
下面是器灵属性的制作。
这里就不贴脚本了,只是说说实现方式,因为可能的类型很多,可以完全自定义,做出任意你需要的东西。
引擎需要支持宝石镶嵌。
以时光模式为例。
装备位置 237 238 239是镶嵌的位置。
我以237 为自定义的图片。数据库自己添加。
238作为一个属性值,图片items目录: 60001 -60009 =分别代表 1 - 9 图片的偏移量自己计算。
239作为一个属性值,图片items目录: 60011 -60019 =分别代表 1 - 9 图片的偏移量自己计算。
[@获得物品]
#ACT
GIVE 裁决 1
SETITEMJEWEL $PARAM(10) 1 60050 这里的60050其实是自定义的物品。不过是比较大的图片。下面的也是。
SETITEMJEWEL $PARAM(10) 2 60001
SETITEMJEWEL $PARAM(10) 2 60011
这里使用60050 等数字表示,是为了告诉大家,这个物品的looks
实际上,他的名字应该是 空格,也就是不可见的中文。这样就不会出现如上图的----横线。不会显示文字。
只是分享给听得懂的人,很多人说听不懂的,也别问我具体怎么实现的。
一个玩了十五年传世的老油条。
另外脚本不是最优脚本,可以自行编写。只是提供个范本。
甚至连测试都么测试,因为之前的脚本不是这样的。删除了一部分东西。添加了一部分东西。
评论