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

📄 usrengn.pas

📁 翎风世界..传奇服务端..DELPHI源代码 包括DBServer,LogDataServer,LoginGate,LoginSrv,M2Server等..内容齐全.
💻 PAS
📖 第 1 页 / 共 5 页
字号:
             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;
          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_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_WANTMINIMAP,
      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_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_SAY: begin
        PlayObject.SendMsg(PlayObject,CM_SAY,0,0,0,0,DecodeString(sMsg));
      end;
      else begin
        PlayObject.SendMsg(PlayObject,
                          DefMsg.Ident,
                          DefMsg.Series,
                          DefMsg.Recog,
                          DefMsg.Param,
                          DefMsg.Tag,
                          sMsg);
      end;
    end;
    if PlayObject.m_boReadyRun then begin
      case DefMsg.Ident of
        CM_TURN,CM_WALK,CM_SITDOWN,CM_RUN,CM_HIT,CM_HEAVYHIT,CM_BIGHIT,
        CM_POWERHIT,CM_LONGHIT,
        CM_WIDEHIT,CM_FIREHIT,CM_CRSHIT,CM_TWINHIT: begin
          Dec(PlayObject.m_dwRunTick,100);
        end;
      end;
    end;      
  except
    MainOutMessage(sExceptionMsg);
  end;
end;
//004AF728
procedure TUserEngine.SendServerGroupMsg(nCode, nServerIdx: Integer;
  sMsg: String);
begin
  if nServerIndex = 0 then begin
    FrmSrvMsg.SendSocketMsg(IntToStr(nCode) + '/' + EncodeString(IntToStr(nServerIdx)) + '/' + EncodeString(sMsg));
  end else begin
    FrmMsgClient.SendSocket(IntToStr(nCode) + '/' + EncodeString(IntToStr(nServerIdx)) + '/' + EncodeString(sMsg));
  end;    
end;
function TUserEngine.AddBaseObject(sMapName:String;nX,nY:Integer;nMonRace:Integer;sMonName:String):TBaseObject;//004AD56C
var
  Map:TEnvirnoment;
  Cert:TBaseObject;
  n1C,n20,n24:Integer;
  p28:Pointer;
begin
  Result:=nil;
  Cert:=nil;
  
  Map:=g_MapManager.FindMap(sMapName);
  if Map = nil then exit;    
  case nMonRace of
    SUPREGUARD: Cert:=TSuperGuard.Create;
    PETSUPREGUARD: Cert:=TPetSuperGuard.Create;
    ARCHER_POLICE: Cert:=TArcherPolice.Create;
    ANIMAL_CHICKEN: begin
      Cert:=TMonster.Create;
      Cert.m_boAnimal:=True;
      Cert.m_nMeatQuality:=Random(3500) + 3000;
      Cert.m_nBodyLeathery:=50;
    end;
    ANIMAL_DEER: begin
      if Random(30) = 0 then begin
        Cert:=TChickenDeer.Create;
        Cert.m_boAnimal:=True;
        Cert.m_nMeatQuality:=Random(20000) + 10000;
        Cert.m_nBodyLeathery:=150;
      end else begin
        Cert:=TMonster.Create;
        Cert.m_boAnimal:=True;
        Cert.m_nMeatQuality:=Random(8000) + 8000;
        Cert.m_nBodyLeathery:=150;
      end;
    end;
    ANIMAL_WOLF: begin
      Cert:=TATMonster.Create;
      Cert.m_boAnimal:=True;
      Cert.m_nMeatQuality:=Random(8000) + 8000;
      Cert.m_nBodyLeathery:=150;
    end;
    TRAINER: begin
      Cert:=TTrainer.Create;
    end;
    MONSTER_OMA: Cert:=TMonster.Create;
    MONSTER_OMAKNIGHT: Cert:=TATMonster.Create;
    MONSTER_SPITSPIDER: Cert:=TSpitSpider.Create;
    83: Cert:=TSlowATMonster.Create;
    84: Cert:=TScorpion.Create;
    MONSTER_STICK: Cert:=TStickMonster.Create;
    86: Cert:=TATMonster.Create;
    MONSTER_DUALAXE: Cert:=TDualAxeMonster.Create;
    88: Cert:=TATMonster.Create;
    89: Cert:=TATMonster.Create;
    90: Cert:=TGasAttackMonster.Create;
    91: Cert:=TMagCowMonster.Create;
    92: Cert:=TCowKingMonster.Create;
    MONSTER_THONEDARK: Cert:=TThornDarkMonster.Create;
    MONSTER_LIGHTZOMBI: Cert:=TLightingZombi.Create;
    MONSTER_DIGOUTZOMBI: begin
      Cert:=TDigOutZombi.Create;
      if Random(2) = 0 then Cert.bo2BA:=True;
    end;
    MONSTER_ZILKINZOMBI: begin
      Cert:=TZilKinZombi.Create;
      if Random(4) = 0 then Cert.bo2BA:=True;
    end;
    97: begin
      Cert:=TCowMonster.Create;
      if Random(2) = 0 then Cert.bo2BA:=True;
    end;

    MONSTER_WHITESKELETON: Cert:=TWhiteSkeleton.Create;
    MONSTER_SCULTURE: begin
      Cert:=TScultureMonster.Create;
      Cert.bo2BA:=True;
    end;
    MONSTER_SCULTUREKING: Cert:=TScultureKingMonster.Create;
    MONSTER_BEEQUEEN: Cert:=TBeeQueen.Create;
    104: Cert:=TArcherMonster.Create;
    105: Cert:=TGasMothMonster.Create;//楔蛾
    106: Cert:=TGasDungMonster.Create;
    107: Cert:=TCentipedeKingMonster.Create;
    110: Cert:=TCastleDoor.Create;
    111: Cert:=TWallStructure.Create;
    MONSTER_ARCHERGUARD: Cert:=TArcherGuard.Create;
    MONSTER_ELFMONSTER: Cert:=TElfMonster.Create;
    MONSTER_ELFWARRIOR: Cert:=TElfWarriorMonster.Create;
    115: Cert:=TBigHeartMonster.Create;
    116: Cert:=TSpiderHouseMonster.Create;
    117: Cert:=TExplosionSpider.Create;
    118: Cert:=THighRiskSpider.Create;
    119: Cert:=TBigPoisionSpider.Create;
    120: Cert:=TSoccerBall.Create;
    130: Cert:=TDoubleCriticalMonster.Create;
    131: Cert:=TRonObject.Create;
    132: Cert:=TSandMobObject.Create;
    133: Cert:=TMagicMonObject.Create;
    134: Cert:=TBoneKingMonster.Create;
    200: Cert:=TElectronicScolpionMon.Create;

    201: Cert:=TClone.Create;
    203: Cert:=TTeleMonster.Create;
    206: Cert:=TKhazard.Create;
    208: Cert:=TGreenMonster.Create;
    209: Cert:=TRedMonster.Create;
    210: Cert:=TFrostTiger.Create;
    214: Cert:=TFireMonster.Create;
    215: Cert:=TFireBallMonster.Create;
  end;

  if Cert <> nil then begin
    MonInitialize(Cert,sMonName);
    Cert.m_PEnvir:=Map;
    Cert.m_sMapName:=sMapName;
    Cert.m_nCurrX:=nX;
    Cert.m_nCurrY:=nY;
    Cert.m_btDirection:=Random(8);
    Cert.m_sCharName:=sMonName;
    Cert.m_WAbil:=Cert.m_Abil;
    if Random(100) < Cert.m_btCoolEye then Cert.m_boCoolEye:=True;
    MonGetRandomItems(Cert); //取得怪物爆物

⌨️ 快捷键说明

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