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

📄 uuser.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 5 页
字号:

function TMacroChecker.CheckCase3: Boolean; // 呈公 磊林 焊郴绰 荤恩
var
   i : integer;
   nTick, nSumTick : Integer;
   pD1, pD2 : PTMouseEventData;
begin
   Result := false;

   nSumTick := 0;
   for i := 0 to nReceivedCount - 2 do begin
      pD1 := DataList.Items[i];
      pD2 := DataList.Items[i + 1];
      if (pD1 = nil) or (pD2 = nil) then exit;
      nTick := pD1^.rTick - pD2^.rTick;
      nSumTick := nSumTick + nTick;
   end;

   nTick := Integer(nSumTick div (nReceivedCount - 1));
   if nTick >= 6000 then exit; // 1盒

   Result := true;
end;

procedure TMacroChecker.SaveMacroCase(aName : String; nCase : Integer);
   function GetCurDate : String;
   var
      nYear, nMonth, nDay : Word;
      sDate : String;
   begin
      Result := '';
      try
         DecodeDate (Date, nYear, nMonth, nDay);
         sDate := IntToStr(nYear);
         if nMonth < 10 then sDate := sDate + '0';
         sDate := sDate + IntToStr(nMonth);
         if nDay < 10 then sDate := sDate + '0';
         sDate := sDate + IntToStr(nDay);
      except
      end;
      Result := sDate;
   end;
var
   Stream : TFileStream;
   szBuffer : array[0..128] of byte;
   tmpStr, CaseStr, FileName : String;
begin
   Case nCase of
      1 : CaseStr := 'MouseMove狼 荐摹父 0 < x < 20牢 荤恩';
      2 : CaseStr := '30盒狼 乞闭荐摹啊 坷瞒 10% 捞郴 裹困牢 荤恩';
      3 : CaseStr := '5盒埃拜焊促 歹 狐弗 矫埃俊 焊郴绰 荤恩';
      4 : CaseStr := 'SpeedHack 荤侩磊';
   end;
   try
      FileName := '.\MacroData\MC' + GetCurDate + '.SDB';
      if FileExists(FileName) then begin
         Stream := TFileStream.Create(FileName, fmOpenReadWrite);
         Stream.Seek(0, soFromEnd);
      end else begin
         Stream := TFileStream.Create(FileName, fmCreate);
         tmpStr := 'DateTime, Name, Case' + #13#10;
         StrPCopy(@szBuffer, tmpStr);
         Stream.WriteBuffer (szBuffer, StrLen(@szBuffer));
      end;

      tmpStr := DateToStr(Date) + ' ' + TimeToStr(Time) + ',' + aName + ',' + CaseStr + ',' + #13#10;
      StrPCopy(@szBuffer, tmpStr);
      Stream.WriteBuffer(szBuffer, StrLen(@szBuffer));
      Stream.Destroy;
   except
   end;
end;

procedure TMacroChecker.AddMouseEvent(pMouseEvent : PTCMouseEvent; anTick : Integer);
var
   pMouseEventData : PTMouseEventData;
begin
   if nSaveCount < DataList.Count then Exit;
   pMouseEventData := DataList.Items[nSaveCount - 1];
   if pMouseEventData = nil then Exit;

   pMouseEventData^.rTick := anTick;
   Move(pMouseEvent^.revent, pMouseEventData^.revent, sizeof(Integer) * 10);
   DataList.Delete (nSaveCount - 1);
   DataList.Insert (0, pMouseEventData);

   if nReceivedCount < nSaveCount then begin
      nReceivedCount := nReceivedCount + 1;
   end;
end;

function TMacroChecker.Check(aName : String) : Boolean;
var
   bFlag : Boolean;
begin
   Result := true;

   bFlag := CheckNone;
   if bFlag = true then begin
      Result := false;
      exit;
   end;

   bFlag := CheckCase1;
   if bFlag = true then begin
      SaveMacroCase(aName, 1);
      exit;
   end;
   bFlag := CheckCase2;
   if bFlag = true then begin
      SaveMacroCase(aName, 2);
      exit;
   end;
   bFlag := CheckCase3;
   if bFlag = true then begin
      SaveMacroCase(aName, 3);
      exit;
   end;

   Result := false;
end;


constructor TUserObject.Create;
begin
   inherited Create;
   
   SendClass := TSendClass.Create;
   AttribClass := TAttribClass.Create (Self, SendClass);

   HaveMagicClass := THaveMagicClass.Create (Self, SendClass, AttribClass);
   WearItemClass := TWearItemClass.Create (Self, SendClass, AttribClass);
   HaveItemClass := THaveItemClass.Create (SendClass, AttribClass);

   LifeObjectState := los_init;
end;

destructor TUserObject.Destroy;
begin
   HaveItemClass.Free;
   WearItemClass.Free;
   HaveMagicClass.Free;

   AttribClass.Free;
   SendClass.Free;
   inherited destroy;
end;

function TUserObject.GetAge : Integer;
begin
   Result := AttribClass.GetAge;
end;

function TUserObject.GetLifeObjectState : TLifeObjectState;
begin
   Result := LifeObjectState;
end;

procedure TUserObject.SetLifeData;
begin
   FillChar (LifeData, SizeOf (TLifeData), 0);

   GatherLifeData (LifeData, AttribClass.AttribLifeData);
   GatherLifeData (LifeData, WearItemClass.WearItemLifeData);
   GatherLifeData (LifeData, HaveMagicClass.HaveMagicLifeData);
   
   CheckLifeData (LifeData);
end;


procedure TUserObject.SetTargetId (aid: integer);
var
   bo : TBasicObject;
begin
   if (TargetId <> 0) and (aid = 0) then begin
      PrevTargetId := TargetId;
   end;
   if aid = BasicData.id then exit;
   TargetId := aid;
   if TargetId = 0 then exit;

   bo := TBasicObject (GetViewObjectById (TargetId));
   if bo = nil then exit;
   if bo.State = wfs_die then exit;
   if TUser (Self).UseSkillKind <> ITEM_KIND_SHOWSKILL then begin
      if bo.BasicData.Feature.rHideState = hs_0 then exit;
   end;

   if Basicdata.Feature.rfeaturestate <> wfs_care then CommandChangeCharState (wfs_care, FALSE);

   LifeObjectState := los_attack;
end;

procedure TUserObject.StartProcess;
var
   ItemData: TItemData;
   str : String;
begin
   Inherited StartProcess;

   RopeTarget := 0;
   RopeTick := 0;
   RopeOldX := 0;
   RopeOldy := 0;

   boShiftAttack := TRUE;
   SearchTick := 0;
   SayTick := 0;
   FreezeTick := 0;
   DiedTick := 0;
   HitedTick := 0;
   // StructedTick := 0;
   TargetId := 0;
   PrevTargetId := 0;
   LifeObjectState := los_none;

   Basicdata.id := GetNewUserId;
   BasicData.Feature := WearItemClass.GetFeature;
   WearItemClass.ViewItem (ARR_WEAPON, @ItemData);
   HaveMagicClass.SetHaveItemMagicType (ItemData.rHitType);
   HaveMagicClass.SelectBasicMagic (ItemData.rHitType, 100, str);

   BasicData.nx := BasicData.x;
   BasicData.ny := BasicData.y;

   SendClass.SendMap (BasicData, Manager.MapName, Manager.ObjName, Manager.RofName, Manager.TilName, Manager.SoundBase);
end;

procedure TUserObject.EndProcess;
begin
   WearItemClass.SaveToSdb (@Connector.CharData);
   HaveItemClass.SaveToSdb (@Connector.CharData);
   AttribClass.SaveToSdb (@Connector.CharData);
   HaveMagicClass.SaveToSdb (@Connector.CharData);

   FreezeTick := 0;
   DiedTick := 0;
   HitedTick := 0;
   // StructedTick := 0;
   TargetId := 0;
   LifeObjectState := los_init;
   Name := '';
   IP := '';
   
   Inherited EndProcess;
end;

function  TUserObject.AllowCommand (CurTick: integer): Boolean;
begin
   Result := TRUE;
   if FreezeTick > CurTick then Result := FALSE;
   if BasicData.Feature.rFeatureState = wfs_die then Result := FALSE;
end;

procedure TUserObject.ShowEffect (aEffectNumber : Word; aEffectKind : TLightEffectKind);
var
   SubData : TSubData;
begin
   BasicData.Feature.rEffectNumber := aEffectNumber;
   BasicData.Feature.rEffectKind := aEffectKind;

   SendLocalMessage (NOTARGETPHONE, FM_CHANGEFEATURE, BasicData, SubData);

   BasicData.Feature.rEffectNumber := 0;
   BasicData.Feature.rEffectKind := lek_none;
end;

function   TUserObject.CommandHited (aattacker: integer; aHitData: THitData; apercent: integer): integer;
var
   // CurTick : Integer;
   snd, n, decbody, dechead, decArm, decLeg, exp : integer;
   SubData : TSubData;
begin
   Result := 0;

   // 嘎狙绰啊 乔沁绰啊
   n := LifeData.avoid + aHitData.ToHit;
   n := Random (n);
   if n < LifeData.avoid then exit; // 乔沁澜.

   {
   CurTick := mmAnsTick;
   if CurTick <= StructedTick + LifeData.recovery then exit;
   StructedTick := CurTick;
   }

   // 贸澜 乔秦 眉仿
   if apercent = 100 then begin
      decHead := aHitData.damagehead - LifeData.armorHead;
      decArm := aHitData.damageArm - LifeData.armorArm;
      decLeg := aHitData.damageLeg - LifeData.armorLeg;
      decbody := aHitData.damageBody - LifeData.armorBody;
   end else begin
      decHead := (aHitData.damagehead * apercent div 100) * aHitData.HitFunctionSkill div 10000 - LifeData.armorHead;
      decArm :=  (aHitData.damageArm * apercent div 100) * aHitData.HitFunctionSkill div 10000 - LifeData.armorArm;
      decLeg :=  (aHitData.damageLeg * apercent div 100) * aHitData.HitFunctionSkill div 10000 - LifeData.armorLeg;
      decbody := (aHitData.damageBody * apercent div 100) * aHitData.HitFunctionSkill div 10000 - LifeData.armorBody;
   end;

   if decHead <= 0 then decHead := 1;
   if decArm <= 0 then decArm := 1;
   if decLeg <= 0 then decLeg := 1;
   if decbody <= 0 then decbody := 1;

   // 郴己俊 狼茄 乔秦 皑家 (个烹俊父 利侩凳)
   n := AttribClass.MaxLife div decBody;
   if n <= 4 then begin
      decBody := decBody - decBody * AttribClass.AttribData.cAdaptive div 20000; // 利览仿篮 50%
   end;
   if decBody <= 0 then decBody := 1;

   // 眉仿家葛
   AttribClass.CurHeadLife := AttribClass.CurHeadLife - decHead;
   AttribClass.CurArmLife  := AttribClass.CurArmLife - decArm;
   AttribClass.CurLegLife  := AttribClass.CurLegLife - decLeg;
   AttribClass.CurLife     := AttribClass.CurLife - decBody;

   //  磊技焊沥...
{
   Case aHitData.HitLevel of
      0..4999 :
         FreezeTick := mmAnsTick;
      5000..5999 :
         FreezeTick := mmAnsTick + (TempData.recovery div 10);
      6000..6999 :
         FreezeTick := mmAnsTick + (TempData.recovery div 8);
      7000..7999 :
         FreezeTick := mmAnsTick + (TempData.recovery div 6);
      8000..8999 :
         FreezeTick := mmAnsTick + (TempData.recovery div 4);
      9000..9499 :
         FreezeTick := mmAnsTick + (TempData.recovery div 2);  50
      9500..9999 :
         FreezeTick := mmAnsTick + TempData.recovery;
   end;
}  {
   Case aHitData.HitLevel of
      9500..9999 : sdec := 40;
      9000..9499 : sdec := 35;
      8000..8999 : sdec := 30;
      7000..7999 : sdec := 20;
      6000..6999 : sdec := 10;
      5000..5999 : sdec := 5;
      0..4999 :    sdec := 0;
   end;
   m := AttribClass.MaxLife div decbody;
   case m of
      0..15  : ddec := 10;
      16..20 : ddec := 5;
      else     ddec := 0;
   end;
   m := sdec + ddec + 50;

   FreezeTick := mmAnsTick + TempData.recovery * m div 100;
   }

   FreezeTick := mmAnsTick + LifeData.recovery;

   if AttribClass.MaxLife <= 0 then BasicData.LifePercent := 0
   else BasicData.LifePercent := AttribClass.CurLife * 100 div AttribClass.MaxLife;
   
   SubData.percent := BasicData.LifePercent;
   SubData.attacker := aattacker;
   SubData.HitData.HitType := aHitData.HitType;
   
   SendLocalMessage (NOTARGETPHONE, FM_STRUCTED, BasicData, SubData);
   Result := n;

   // 磷阑订 酒公 版摹档 绝澜
   if AttribClass.CurLife = 0 then exit;

   // 利览仿 歹窍扁 郴己 +
   n := AttribClass.MaxLife div decBody;
   if n <= 4 then AttribClass.AddAdaptive (DEFAULTEXP);

⌨️ 快捷键说明

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