关于脚本命令 AddUseItemProp CheckUseItemProp AddUseItemProp SetUseItemProp
变量输出 $UseItemProp_Num1_Num2
变量运算 %UseItemProp_Num1_Num2
命令:AddUseItemProp
作用:让玩家无须通过小号而直接变更所佩带物品的属性
格式:AddUseItemProp 参数1 参数2 参数3 参数4(可省略)
说明:参数1为所佩带物品的位置,参数2为属性类型,参数3为具体属性,参数4=1则设置后不取到包裹中,否则设置后自动取到包裹中
补充:插件从1.1.0915版本开始,第4个参数的作用发生改变。如果第4个参数为1表示需要通知客户端,装备属性已更改,为0表示不通知,但不会再取装备到包裹中去了。
脚本举例:
#IF
#ACT
;;以下脚本将鞋子的舒适度+5
AddUseItemProp 10 0 5
#SAY
你的鞋子比以前更舒适些了吧。
附:身上物品位置对应表
0='衣服',
1='武器',
2='火把',
3='项链',
4='头盔',
5='左手镯',
6='右手镯',
7='左戒指',
8='右戒指',
9='护身符',
10='鞋子'
附:关于对应第2和第3个参数的说明:
关于CheckUseItemProp AddUseItemProp SetUseItemProp $UseItemProp_Num1_Num2 %UseItemProp_Num1_Num2对应第2和第3个参数的说明:
FLD_DESC:身上内存数据中的一个字节属性表,它的序号为从0-13之间,如:tmpItem.FLD_DESC[0] 。人物下线后,它们将分别保存到Game数据库的TBL_ITEM表的FLD_DESC0到FLD_DESC13字段。
$UseItemProp_Num1_Num2 %UseItemProp_Num1_Num2 是变量,其中的 Num1 取值应为0-10的数字(表示身上物品的位置),Num2取值应为0-13的数字(表示FLD_DESC的标号),
例如:
#IF
#ACT
mov D0 %UseItemProp_1_0
#IF
Equal D0 0
#SAY
你的武器没有(加攻击上限)的极品属性。
#ELSESAY
你的武器是极品,它可以增加 <$OutPut(D0)> 点攻击上限。
属性列表:
0(攻击上限):$UseItemProp_1_0
1(魔法上限):$UseItemProp_1_1
3(幸运):$UseItemProp_1_3
4(诅咒):$UseItemProp_1_4
5(准确):$UseItemProp_1_5
6(攻击速度):$UseItemProp_1_6
7(Source):$UseItemProp_1_7
10(Reserved):$UseItemProp_1_10
和数据库属性对应的:
Shape=19-24,15,26,10,11,42
FLD_DESC[0] 等价于 数据库的Ac2字段增加FLD_DESC[0]
FLD_DESC[1] 等价于 数据库的Mac2字段增加FLD_DESC[1]
FLD_DESC[2] 等价于 数据库的Dc2字段增加FLD_DESC[2]
FLD_DESC[3] 等价于 数据库的Mc2字段增加FLD_DESC[3]
Shape=5,6
FLD_DESC[0] 等价于 数据库的Dc2字段增加FLD_DESC[0]
FLD_DESC[1] 等价于 数据库的Mc2字段增加FLD_DESC[1]
FLD_DESC[3] 等价于 数据库的Ac字段增加FLD_DESC[3]
FLD_DESC[5] 等价于 数据库的Ac2字段增加FLD_DESC[5]
FLD_DESC[4] 等价于 数据库的Mac字段增加FLD_DESC[4]
FLD_DESC[6] 等价于 数据库的Mac2字段增加FLD_DESC[6]
如果FLD_DESC[7] 在1-10之间, 等价于 数据库的Source字段等于FLD_DESC[7]
如果FLD_DESC[10] 不等于 0 等价于 数据库的 Reserved 字段等于 (Reserved or 1)
Shape=35
FLD_DESC[0] 等价于 数据库的Dc字段增加FLD_DESC[0],Dc2字段增加FLD_DESC[0]
FLD_DESC[1] 等价于 数据库的Mc字段增加FLD_DESC[1]
FLD_DESC[2] 等价于 数据库的Mc2字段增加FLD_DESC[2]
同时,数据库的Ac,Ac2,Mac,Mac2字段值失效
和人物属性点直接对应的:
FLD_DESC[11]在1-7之间,则这个值表示攻击元素的类型,并增加此类型的攻击元素FLD_DESC[12]点。
Shape=19-23,55
FLD_DESC[5]在1-7之间,则这个值表示攻击元素的类型,并增加此类型的攻击元素FLD_DESC[6]点。
Shape=10,11 衣服
如果FLD_DESC[5]不等于0,则加FLD_DESC[5]对应的强元素2点
如果FLD_DESC[6]不等于0,则加FLD_DESC[6]对应的弱元素1点
Shape=15,24,26,53
如果FLD_DESC[5]不等于0,则加FLD_DESC[5]对应的强元素1点
如果FLD_DESC[6]不等于0,则加FLD_DESC[6]对应的弱元素1点
Shape=10,11,53
红=红+FLD_DESC[8] * 10
蓝=蓝+FLD_DESC[9] * 10
Shape=53 鞋子:
舒适=FLD_DESC[0]+舒适
负重=FLD_DESC[1]+负重
手负重=FLD_DESC[2]+手负重
//身上物品的 FLD_DESC 值与其属性的对应算法
procedure TEICreature.ApplyItemParameters(uitem: TEIUserItem;
var aTP: TWDAddAbility);
var
aStditem: PTEIStdItem;
tmpStditem: TEIStdItem;
I,Int10 :Integer;
begin
//
aStditem := UserEngine.GetStdItem (uitem.Index);
if aStditem = nil then exit;
//MainOutMessage (Format ('name:%s Start -> MinSC: %d MaxSC:%d MinAC:%d MaxAC:%d',[aStditem.ItemName, aTP.MinSC, aTP.MaxSC, aTP.MinAC, aTP.MaxAC]));
tmpStditem := aStditem^;
ItemMan.GetUpgradeStdItem (uitem, tmpStditem); //
Case aStditem.Stdmode of
5,6,54,55://
begin
if tmpStditem.AC2 > 100 then aTP.Hit := aTP.Hit-(tmpStditem.AC2-100)
else aTP.Hit := aTP.Hit+ tmpStditem.AC2;
if tmpStditem.MAC2 > 10 then aTP.HitSpeed := aTP.HitSpeed+(tmpStditem.MAC2-10)
else aTP.HitSpeed := aTP.HitSpeed- tmpStditem.MAC2;
aTP.Luck := aTP.Luck+tmpStditem.Ac;
aTP.UnLuck :=aTP.UnLuck+tmpStditem.Mac;
end;
19://
begin
aTP.AntiMagic :=aTP.AntiMagic+ tmpStditem.AC2;
aTP.UnLuck :=aTP.UnLuck+tmpStditem.Mac;
aTP.Luck :=aTP.Luck+ tmpStditem.MAC2;
end;
20,24://
begin
aTP.Hit :=aTP.Hit+ tmpStditem.MAC2;
aTP.SPEED :=aTP.SPEED+ tmpStditem.MAC2;
end;
21://
begin
aTP.HealthRecover :=Min(18,aTP.HealthRecover+ tmpStditem.AC2);
aTP.SpellRecover :=Min(18,aTP.SpellRecover+ tmpStditem.MAC2);
aTP.HitSpeed :=aTP.HitSpeed+tmpStditem.Ac;
aTP.HitSpeed :=aTP.HitSpeed-tmpStditem.Mac;
end;
23://
begin
aTP.AntiPoison :=aTP.AntiPoison+ tmpStditem.AC2;
aTP.PoisonRecover :=aTP.PoisonRecover+ tmpStditem.MAC2;
aTP.HitSpeed :=aTP.HitSpeed+LoByte (tmpStditem.Ac);
aTP.HitSpeed :=aTP.HitSpeed- tmpStditem.Mac;
end;
53://
begin
aTP.Slowdown :=aTP.Slowdown+uItem.DESC[0];
aTP.MaxFuZhong :=aTP.MaxFuZhong+uItem.DESC[1];
aTP.MaxHandFuZhong :=aTP.MaxHandFuZhong+uItem.DESC[2];
end;
else if aStditem.StdMode <> 25 then
begin
//
aTP.MinAc := aTP.MinAc + LoByte (tmpStditem.Ac);
aTP.MaxAc := aTP.MaxAc + (tmpStditem.Ac2);
aTP.MinMac := aTP.MinMac + LoByte (tmpStditem.Mac);
aTP.MaxMac := aTP.MaxMac + (tmpStditem.Mac2);
end;
end;
//
if (aStditem.Stdmode<>53) And (aStditem.Stdmode<>25) then begin
if tmpStditem.SC>0 then begin
Int10 :=tmpStditem.SC-1;
if Int10<=6 then begin
Case aStditem.Stdmode of
10,11:aTP.ATOM_MC[Int10] :=aTP.ATOM_MC[Int10]+2; //???为什么不检测Int10的范围
else aTP.ATOM_MC[Int10] :=aTP.ATOM_MC[Int10]+1;
end;
end;
end;
if HiByte(tmpStditem.SC)>0 then begin
Int10 :=HiByte(tmpStditem.SC)-1;
if Int10<=6 then begin
Case aStditem.Stdmode of
10,11:aTP.ATOM_MAC[Int10] :=aTP.ATOM_MAC[Int10]+2; //???为什么不检测Int10的范围
else aTP.ATOM_MAC[Int10] :=aTP.ATOM_MAC[Int10]+1;
end;
end;
end;
aTP.MinDC := aTP.MinDC + LoBYte (tmpStditem.Dc);
aTP.MaxDC := aTP.MaxDC + tmpStditem.Dc2;
if (tmpStditem.McType=0) or (tmpStditem.McType=1) then begin
aTP.MinMc := aTP.MinMc + LoByte (tmPStditem.Mc);
aTP.MaxMc := aTP.MaxMc + tmpStditem.Mc2;
end;
if (tmpStditem.McType=0) or (tmpStditem.McType=2) then begin
aTP.MinSc := aTP.MinSc + tmpStditem.Mc;
aTP.MaxSc := aTP.MaxSc + tmpStditem.Mc2;
end;
Case aStditem.Stdmode of
5,6: //
begin
if (tmpStditem.AtomDCType >0) And (tmpStditem.AtomDCType<8) And (uItem.DESC[11]=0) then begin
Int10 := tmpStditem.AtomDCType-1;
aTP.ATOM_DC[Int10] :=MakeWord(LoByte(aTP.ATOM_DC[Int10]),HiByte(aTP.ATOM_DC[Int10])+tmpStditem.AtomDC);
end else begin
Case uItem.DESC[11] of
1..7:
begin
Int10 := uItem.DESC[11]-1;
aTP.ATOM_DC[Int10] :=MakeWord(LoByte(aTP.ATOM_DC[Int10]),HiByte(aTP.ATOM_DC[Int10])+tmpStditem.AtomDC+uItem.DESC[12]);
end;
end;
end;
end;
else
begin
//
if (tmpStditem.AtomDCType >0) And (tmpStditem.AtomDCType<8) And (tmpStditem.AtomDCType<>uItem.DESC[11]) then begin
Int10 :=tmpStditem.AtomDCType-1;
aTP.ATOM_DC[Int10] :=MakeWord(LoByte(aTP.ATOM_DC[Int10]),HiByte(aTP.ATOM_DC[Int10])+tmpStditem.AtomDC);
end;
//
if tmpStditem.AtomDCType=uItem.DESC[11] then begin
Case uItem.DESC[11] of
1..7:
begin
if uItem.DESC[12]>0 then begin
Int10 := uItem.DESC[11]-1;
aTP.ATOM_DC[Int10] :=MakeWord(LoByte(aTP.ATOM_DC[Int10]),HiByte(aTP.ATOM_DC[Int10])+tmpStditem.AtomDC+uItem.DESC[12]);
end;
end;
end;
end else begin
//
Case uItem.DESC[11] of
1..7:
begin
if uItem.DESC[12]>0 then begin
Int10 := uItem.DESC[11]-1;
aTP.ATOM_DC[Int10] :=MakeWord(LoByte(aTP.ATOM_DC[Int10]),HiByte(aTP.ATOM_DC[Int10])+uItem.DESC[12]);
end;
end;
end;
end;
//
Case tmpStditem.Stdmode of
19..23,60://$50CA9A
begin
Case uItem.DESC[5] of
1..7:
begin
if uItem.DESC[6]>0 then begin
Int10 := uItem.DESC[5]-1;
aTP.ATOM_DC[Int10] :=MakeWord(LoByte(aTP.ATOM_DC[Int10]),HiByte(aTP.ATOM_DC[Int10])+uItem.DESC[6]);
end;
end;
end;//Case tmpItem.Desc[5] of
end;//19..23,60
end;//Case tmpStditem.Stdmode of
end;
end;
end;
//
Case tmpStditem.Stdmode of
10,11:
begin
for I:= 0 to 6 do begin
if ((1 shl I) And uItem.DESC[5]) <> 0 then aTP.ATOM_MC[I] := aTP.ATOM_MC[I]+2;
if ((1 shl I) And uItem.DESC[6]) <> 0 then aTP.ATOM_MAC[I] := aTP.ATOM_MAC[I]+2;
end;
end;
end;
//
Case tmpStditem.Stdmode of
15,24,26,53:
begin
for I:= 0 to 6 do begin
if ((1 shl I) And uItem.DESC[5]) <> 0 then aTP.ATOM_MC[I] := aTP.ATOM_MC[I]+1;
if ((1 shl I) And uItem.DESC[6]) <> 0 then aTP.ATOM_MAC[I] := aTP.ATOM_MAC[I]+1;
end;
end;
end;
//
for I:= 0 to 6 do begin
if (aTP.ATOM_MAC[I] > 0) And (aTP.ATOM_MC[I]>0) then begin
if aTP.ATOM_MC[I] > aTP.ATOM_MAC[I] then begin
aTP.ATOM_MC[I] := aTP.ATOM_MC[I] - aTP.ATOM_MAC[I];
aTP.ATOM_MAC[I] := 0;
end else begin
aTP.ATOM_MAC[I] := aTP.ATOM_MAC[I] - aTP.ATOM_MC[I];
aTP.ATOM_MC[I] := 0;
end;
end;
if aTP.ATOM_MC[I] > 5 then aTP.ATOM_MC[I] := 5;
if aTP.ATOM_MAC[I] > 5 then aTP.ATOM_MAC[I] := 5;
end;
//
Case tmpStditem.Stdmode of
10,11,53:
begin
aTP.HP :=aTP.HP+uItem.DESC[8]*10;
aTP.MP :=aTP.MP+uItem.DESC[9]*10;
end;
end;
//$50CC6E
//完成于 2006/08/09
//MainOutMessage (Format ('name:%s End ->MinSC: %d MaxSC:%d MinAC:%d MaxAC:%d',[aStditem.ItemName, aTP.MinSC, aTP.MaxSC, aTP.MinAC, aTP.MaxAC]));
end;
|