📄 uuser.pas
字号:
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 + -