发布站主页

发布私服 发布家族 全部私服信息 技术交流 站长广告 收藏本站
传奇3私服

黑金传奇3私服发布站已经全新改版,发布传奇3sf游戏请联系QQ:2305566902 非联系此QQ的后果自负

关于在线装备调整命令

文章来源:黑金传奇3私服发布站

加入时间:2014/4/2

关于脚本命令 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;





 技术文章:


 玩家新得:




 

传奇3私服 | 游戏发布 | 家族发布 | 广告服务

Copyright 2006-2017 版本所有 唯一网址:www.45zf.com
传奇3私服黑金论坛发布站创办于2006年,至今已有11年,全国人气保证
免责声明:本站所发布的传奇3私服内容均来自网络,本站不对其版权,真实性,合法性负责
请访问用户自行判断,如有分侵犯版权问题,请联系我们,Emaill:2305566902#qq.com(#换成@)
拒绝盗版游戏,注意自我保护谨防受骗上当,适度游戏益脑,沉迷游戏伤身,合理安排时间享受健康生活!