⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usrengn.pas

📁 传奇源代码的delphi版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
end;

function TUserEngine.GetStdItem(nItemIdx: Integer): TItem; //004AC2F8
begin
  Result:=nil;
    Dec(nItemIdx);
    if (nItemIdx >= 0) and (StdItemList.Count > nItemIdx) then begin
      Result:=StdItemList.Items[nItemIdx];
      if Result.Name = '' then Result:=nil;
    end;
end;
function TUserEngine.GetStdItem(sItemName:String): TItem; //004AC348
var
  I: Integer;
  StdItem:TItem;
begin
  Result:=nil;
  if sItemName = '' then exit;
    for I := 0 to StdItemList.Count - 1 do begin
      StdItem:=StdItemList.Items[i];
      if CompareText(StdItem.Name,sItemName) = 0 then begin
        Result:=StdItem;
        break;
      end;
    end;
end;

function TUserEngine.GetStdItemWeight(nItemIdx: Integer): Integer; //004AC2B0
var
  StdItem:TItem;
begin
    Dec(nItemIdx);
    if (nItemIdx >= 0) and (StdItemList.Count > nItemIdx) then begin
      StdItem:=StdItemList.Items[nItemIdx];
      Result:=StdItem.Weight;
    end else begin
      Result:=0;
    end;
end;

function TUserEngine.GetStdItemName(nItemIdx: Integer): String;//004AC1AC
begin
  Result:='';
  Dec(nItemIdx);
    if (nItemIdx >= 0) and (StdItemList.Count > nItemIdx) then begin
      Result:=TItem(StdItemList.Items[nItemIdx]).Name;

    end else Result:='';
end;

function TUserEngine.FindOtherServerUser(sName: String;
  var nServerIndex): Boolean;
begin
  Result:=False;
end;

//004AEA00
procedure TUserEngine.CryCry(wIdent: Word; pMap: TEnvirnoment; nX, nY,
  nWide: Integer;btFColor,btBColor:Byte; sMsg: String);
var
  i:integer;
  PlayObject:TPlayObject;
begin
  for I := 0 to m_PlayObjectList.Count - 1 do begin
    PlayObject:=TPlayObject(m_PlayObjectList.Objects[i]);
    if not PlayObject.m_boGhost and
      (PlayObject.m_PEnvir = pMap) and
      (PlayObject.m_boBanShout) and
      (abs(PlayObject.m_nCurrX - nX) < nWide) and
      (abs(PlayObject.m_nCurrY - nY) < nWide) then begin

      //PlayObject.SendMsg(nil,wIdent,0,0,$FFFF,0,sMsg);
      PlayObject.SendMsg(nil,wIdent,0,btFColor,btBColor,0,sMsg);
    end;
  end;
end;

function  TUserEngine.MonGetRandomItems (mon: TBaseObject):Integer;//004AD2E8
var
   i: integer;
   ItemList:TList;
   iname: string;
   MonItem:pTMonItem;
   UserItem:pTUserItem;
   StdItem:TItem;
   Monster:pTMonInfo;
begin
   ItemList:= nil;
     for i:=0 to MonsterList.Count-1 do begin
       Monster:=MonsterList.Items[i];
       if CompareText(Monster.sName, mon.m_sCharName) = 0 then begin
         ItemList:=Monster.Itemlist;
         break;
       end;
     end;
   if ItemList <> nil then begin
      for i:=0 to ItemList.Count-1 do begin
         MonItem:=pTMonItem(ItemList[i]);
         if Random(MonItem.MaxPoint) <= MonItem.SelPoint then begin
           if CompareText(MonItem.ItemName, sSTRING_GOLDNAME) = 0 then begin
             mon.m_nGold := mon.m_nGold + (MonItem.Count div 2) + Random(MonItem.Count);
            end else begin
               //蜡聪农 酒捞袍 捞亥飘....
               iname := '';
               ////if (BoUniqueItemEvent) and (not mon.BoAnimal) then begin
               ////   if GetUniqueEvnetItemName (iname, numb) then begin
                     //numb; //iname
               ////   end;
               ////end;
               if iname = '' then
                  iname := MonItem.ItemName;

               New(UserItem);
               if CopyToUserItemFromName (iname, UserItem) then begin
                  UserItem.Dura := Round ((UserItem.DuraMax / 100) * (20+Random(80)));

                  StdItem:=GetStdItem(UserItem.wIndex);
                  ////if pstd <> nil then
                  ////   if pstd.StdMode = 50 then begin  //惑前鼻
                  ////      pu.Dura := numb;
                  ////   end;
                  if Random(g_Config.nMonRandomAddValue{10}) = 0 then
                     StdItem.RandomUpgradeItem(UserItem);
                  if StdItem.StdMode in [15,19,20,21,22,23,24,26] then begin
                    if (StdItem.Shape = 130) or (StdItem.Shape = 131) or (StdItem.Shape = 132) then begin
                      StdItem.RandomUpgradeUnknownItem(UserItem);
                    end;                      
                  end;                      
                  mon.m_ItemList.Add(UserItem)
               end else
                  Dispose(UserItem);
            end;
         end;
      end;
   end;
   Result:= 1;
end;

//004AC404
function TUserEngine.CopyToUserItemFromName(sItemName:String;Item:pTUserItem):Boolean;
var
  I: Integer;
  StdItem:TItem;
begin
  Result:=False;
    if sItemName <> '' then begin
      for I := 0 to StdItemList.Count - 1 do begin
        StdItem:=StdItemList.Items[i];
        if CompareText(StdItem.Name,sItemName) = 0 then begin
          FillChar(Item^,SizeOf(TUserItem),#0);
          Item.wIndex:=i + 1;
          Item.MakeIndex:=GetItemNumber();
          Item.Dura:=StdItem.DuraMax;
          Item.DuraMax:=StdItem.DuraMax;
          Item.Amount:=1;
          Result:=True;
          break;
        end;
      end;
    end;
end;

procedure TUserEngine.ProcessUserMessage(PlayObject:TPlayObject;DefMsg:pTDefaultMessage;Buff:PChar); //004B232C
var
  sMsg:String;
ResourceString
  sExceptionMsg = '[Exception] TUserEngine::ProcessUserMessage..';
begin
  if (DefMsg = nil) then exit;
  try
    if Buff = nil then sMsg:=''
    else sMsg:=StrPas(Buff);

    case DefMsg.Ident of
      CM_SPELL: begin //3017
        //if PlayObject.GetSpellMsgCount <=2 then  //如果队排里有超过二个魔法操作,则不加入队排
        if g_Config.boSpellSendUpdateMsg then begin //使用UpdateMsg 可以防止消息队列里有多个操作
          PlayObject.SendUpdateMsg(PlayObject,
                            DefMsg.Ident,
                            DefMsg.Tag,
                            LoWord(DefMsg.Recog),
                            HiWord(DefMsg.Recog),
                            MakeLong(DefMsg.Param,
                            DefMsg.Series),
                            '');
        end else begin
          PlayObject.SendMsg(PlayObject,
                            DefMsg.Ident,
                            DefMsg.Tag,
                            LoWord(DefMsg.Recog),
                            HiWord(DefMsg.Recog),
                            MakeLong(DefMsg.Param,
                            DefMsg.Series),
                            '');
        end;
      end;

      CM_QUERYUSERNAME: begin//80
        PlayObject.SendMsg(PlayObject,DefMsg.Ident,0,DefMsg.Recog,DefMsg.Param{x},DefMsg.Tag{y},'');
      end;

      CM_ADDBADFRIEND,
      CM_ADDFRIEND: begin
         PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          0,
                          DefMsg.Recog,
                          0,
                          0,
                          DecodeString(sMsg));
      end;

      CM_DELFRIEND: begin
         PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          0,
                          0,
                          0,
                          0,
                          DecodeString(sMsg));
      end;

      CM_UPDATEMEMOFRIEND: begin
         PlayObject.SendMsg(PlayObject, DefMsg.Ident, 0, 0, 0, 0, DecodeString(sMsg));
      end;

      CM_REQMEMOFRIEND: begin
         PlayObject.SendMsg(PlayObject, DefMsg.Ident, 0, 0, 0, 0, DecodeString(sMsg));
      end;

      CM_REQUESTMAILLIST,
      CM_SENDMAIL,
      CM_READMAIL,
      CM_DELETEMAIL,
      CM_SETMAILSTATUS,
      CM_REQUESTBLOCKLIST,
      CM_ADDBLOCK,
      CM_DELBLOCK: begin
        PlayObject.SendMsg(PlayObject, DefMsg.Ident, DefMsg.Series, DefMsg.Recog, DefMsg.Param, DefMsg.Tag, DecodeString(sMsg));
      end;


      CM_DROPITEM,
      CM_TAKEONITEM,
      CM_TAKEOFFITEM,
      CM_1005,

      CM_MERCHANTDLGSELECT,
      CM_MERCHANTQUERYSELLPRICE,
      CM_USERSELLITEM,
      CM_USERBUYITEM,
      CM_USERGETDETAILITEM,

      CM_CREATEGROUP,
      CM_ADDGROUPMEMBER,
      CM_DELGROUPMEMBER,
      CM_USERREPAIRITEM,
      CM_MERCHANTQUERYREPAIRCOST,
      CM_DEALTRY,
      CM_DEALADDITEM,
      CM_DEALDELITEM,

      CM_USERSTORAGEITEM,
      CM_USERTAKEBACKSTORAGEITEM,
      CM_USERMAKEDRUGITEM,

//      CM_GUILDHOME,
      CM_GUILDADDMEMBER,
      CM_GUILDDELMEMBER,
      CM_GUILDUPDATENOTICE,
      CM_GUILDUPDATERANKINFO: begin
        PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          DefMsg.Series,
                          DefMsg.Recog,
                          DefMsg.Param,
                          DefMsg.Tag,
                          DecodeString(sMsg));
      end;
      CM_PASSWORD,
      CM_CHGPASSWORD,
      CM_SETPASSWORD: begin
        PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          DefMsg.Param,
                          DefMsg.Recog,
                          DefMsg.Series,
                          DefMsg.Tag,
                          DecodeString(sMsg));
      end;
      CM_ADJUST_BONUS: begin //1043
        PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          DefMsg.Series,
                          DefMsg.Recog,
                          DefMsg.Param,
                          DefMsg.Tag,
                          sMsg);
      end;
    {  CM_GEMSYSTEM: begin
      mainoutmessage('gemsss');
      PlayObject.CreateGem(sMsg);
      end; }

      CM_HORSERUN,
      CM_TURN,
      CM_WALK,
      CM_SITDOWN,
      CM_RUN,
      CM_HIT,
      CM_HEAVYHIT,
      CM_BIGHIT,

      CM_POWERHIT,
      CM_LONGHIT,
      CM_CRSHIT,
      CM_TWINHIT,
      CM_WIDEHIT,
      CM_FIREHIT: begin
        if g_Config.boActionSendActionMsg then begin //使用UpdateMsg 可以防止消息队列里有多个操作
          PlayObject.SendActionMsg(PlayObject,
                          DefMsg.Ident,
                          DefMsg.Tag,
                          LoWord(DefMsg.Recog),{x}
                          HiWord(DefMsg.Recog),{y}
                          0,
                          '');
        end else begin
          PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          DefMsg.Tag,
                          LoWord(DefMsg.Recog),{x}
                          HiWord(DefMsg.Recog),{y}
                          0,
                          '');
        end;
      end;

{      CM_BUYGAMESHOPITEM: begin
          PlayObject.SendUpdateMsg(PlayObject,
            DefMsg.Ident,
            DefMsg.Series,
            DefMsg.R

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -