📄 usendcls.pas
字号:
unit uSendCls;
interface
uses
Windows, SysUtils, Classes, Usersdb, Deftype, AnsUnit,
AnsImg2, AUtil32, subutil, uConnect;
type
TSendClass = class
private
Name : String;
Connector : TConnector;
public
constructor Create;
destructor Destroy; override;
procedure SetConnector (aConnector : TConnector);
procedure SetName (aName : String);
procedure SendCancelExChange;
procedure SendShowExChange (pexleft, pexright: PTExChangedata);
procedure SendShowCount (aCountId, aSourKey, aDestKey, aCntMax: integer; acaption: string);
procedure SendShowInputString (aInputStringId: integer; aCaptionString: string; aListString: string);
procedure SendShiftAttack (abo: Boolean);
procedure SendAttribFightBasic (astr: string);
procedure SendAttribBase (var AttribData: TAttribData; var CurAttribData: TCurAttribData);
procedure SendAttribValues (var AttribData: TAttribData; var CurAttribData: TCurAttribData);
procedure SendChangeFeature (var aSenderinfo: TBasicData);
procedure SendChangeProperty (var aSenderinfo: TBasicData);
procedure SendSay (var aSenderinfo: TBasicData; astr: string);
procedure SendSayUseMagic (var aSenderinfo: TBasicData; astr: string);
procedure SendEventString (astr: string);
procedure SendUsedMagicString (astr: string);
procedure SendShootMagic (var aSenderinfo: TBasicData; atid: integer; ax, ay, abowimage, abowspeed : word; atype : Byte);
procedure SendTurn (var aSenderinfo: TBasicData);
procedure SendMove (var aSenderinfo: TBasicData);
procedure SendMotion (aid, amotion: integer);
procedure SendStructed (var aSenderInfo : TBasicData; aPercent: integer);
procedure SendChatMessage (astr: string; aColor: byte);
procedure SendStatusMessage (astr: string);
procedure SendShow (var aSenderinfo: TBasicData);
procedure SendHide (var aSenderinfo: TBasicData);
procedure SendHaveItem (akey: word; var ItemData: TItemData);
procedure SendHaveMagic (akey: word; var MagicData: TMagicData);
procedure SendBasicMagic (akey: word; var MagicData: TMagicData);
procedure SendWearItem (akey: word; var ItemData: TItemData);
procedure SendMap (var aSenderInfo: TBasicData; amap, aobj, arof, atil, aSoundBase: string);
procedure SendSetPosition (var aSenderinfo: TBasicData);
procedure SendSoundEffect (asoundname: string; ax, ay : Word);
procedure SendSoundBase (asoundname: string; aRoopCount: integer);
procedure SendSoundBase2 (asoundname: string; aRoopCount: integer);
procedure SendItemMoveInfo (ainfostr: string);
procedure SendRainning (aRain : TSRainning);
procedure SendLogItem (akey: word; var ItemData: TItemData);
procedure SendShowSpecialWindow (aWindow : Byte; aCaption : String; aComment : String);
procedure SendShowGuildMagicWindow (aMagicWindowData : PTSShowGuildMagicWindow);
procedure SendNetState (aID, aTick : Integer);
end;
implementation
uses
FSockets, svClass;
///////////////////////////////////
// TSendClass
///////////////////////////////////
procedure TSendClass.SendShowCount (aCountID, aSourKey, aDestKey, aCntMax: Integer; aCaption: String);
var
ComData : TWordComData;
psCount : PTSCount;
begin
psCount := @ComData.Data;
with psCount^ do begin
rMsg := SM_SHOWCOUNT;
rCountID := aCountID;
rSourKey := aSourKey;
rDestKey := aDestKey;
rCountCur := 0;
rCountMax := aCntMax;
SetWordString (rCountName, aCaption);
ComData.Size := SizeOf(TSCount) - sizeof(TWordString) + sizeofWordstring(rCountName);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendCancelExChange;
var
ComData : TWordComData;
pcKey : PTCKey;
begin
pcKey := @ComData.Data;
with pcKey^ do begin
rmsg := SM_HIDEEXCHANGE;
ComData.Size := SizeOf (TCKey);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendShowExChange (pexleft, pexright: PTExChangedata);
var
ComData : TWordComData;
i : integer;
str : string;
psExChange : PTSExChange;
begin
psExChange := @ComData.Data;
with psExChange^ do begin
rmsg := SM_SHOWEXCHANGE;
rCheckLeft := pexleft^.rboCheck;
rCheckRight := pexright^.rboCheck;
str := format ('%s,%s,', [pexright^.rExChangeName, pexleft^.rExChangeName]);
for i := 0 to 4 - 1 do begin
if pexleft^.rItems[i].rItemCount <> 0 then begin
rIcons[i] := pexleft^.rItems[i].ricon;
rColors[i] := pexleft^.rItems[i].rColor;
str := str + pexleft^.rItems[i].rItemViewName + ':' + InttoStr (pexleft^.rItems[i].rItemCount) + ',';
end else begin
rIcons[i] := 0;
rColors[i] := 0;
str := str + ',';
end;
end;
for i := 0 to 4-1 do begin
if pexright^.rItems[i].rItemCount <> 0 then begin
rIcons[i+4] := pexright^.rItems[i].ricon;
rColors[i+4] := pexright^.rItems[i].rColor;
str := str + pexright^.rItems[i].rItemViewName + ':' + InttoStr (pexright^.rItems[i].rItemCount) + ',';
end else begin
rIcons[i+4] := 0;
rColors[i+4] := 0;
str := str + ',';
end;
end;
SetWordString (rWordString, str);
ComData.Size := Sizeof(TSExChange) - sizeof(TWordString) + SizeofWordString(rWordString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendShowInputString (aInputStringId: integer; aCaptionString: string; aListString: string);
var
ComData : TWordComData;
cnt : integer;
psShowInputString: PTSShowInputString;
begin
psShowInputString := @ComData.Data;
with psShowInputString^ do begin
rmsg := SM_SHOWINPUTSTRING;
rInputStringid := aInputStringId;
SetWordString (rWordString, aCaptionString + ',' + aListString);
ComData.Size := sizeof(TSShowInputString) - sizeof(TWordString) + sizeofwordstring(rWordString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendRainning (aRain : TSRainning);
var
ComData : TWordComData;
psRainning : PTSRainning;
begin
psRainning := @ComData.Data;
Move (aRain, psRainning^, SizeOf (TSRainning));
ComData.Size := SizeOf (TSRainning);
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendItemMoveInfo (ainfostr: string);
var
cnt : integer;
usd : TStringData;
begin
usd.rmsg := 1;
SetWordString (usd.rWordString, ainfostr + Connector.IpAddr + ',');
cnt := sizeof(usd) - sizeof(TWordString) + sizeofwordstring (usd.rwordstring);
FrmSockets.UdpItemMoveInfoAddData (cnt, @usd);
end;
constructor TSendClass.Create;
begin
Connector := nil;
end;
destructor TSendClass.Destroy;
begin
inherited destroy;
end;
procedure TSendClass.SetConnector (aConnector : TConnector);
begin
Connector := aConnector;
end;
procedure TSendClass.SetName (aName : String);
begin
Name := aName;
end;
procedure TSendClass.SendShiftAttack (abo: Boolean);
var
ComData : TWordComData;
pcKey: PTCKey;
begin
pcKey := @ComData.Data;
with pcKey^ do begin
rmsg := SM_BOSHIFTATTACK;
if abo then rkey := 0
else rkey := 1;
ComData.Size := SizeOf (TCKey);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendAttribFightBasic (astr: string);
var
ComData : TWordComData;
cnt : integer;
psAttribFightBasic: PTSAttribFightBasic;
begin
psAttribFightBasic := @ComData.Data;
with psAttribFightBasic^ do begin
rmsg := SM_ATTRIB_FIGHTBASIC;
SetWordString (rWordString, astr);
ComData.Size := sizeof(TSAttribFightBasic) - sizeof(TWordString) + sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendAttribValues (var AttribData: TAttribData; var CurAttribData: TCurAttribData);
var
ComData : TWordComData;
psAttribValues: PTSAttribValues;
begin
psAttribValues := @ComData.Data;
with psAttribValues^ do begin
rmsg := SM_ATTRIB_VALUES;
rLight := AttribData.cLight;
rDark := AttribData.cDark;
rMagic := AttribData.cMagic;
rTalent := AttribData.cTalent;
rGoodChar := AttribData.cGoodChar;
rBadChar := AttribData.cBadChar;
rLucky := AttribData.cLucky;
rAdaptive := AttribData.cAdaptive;
rRevival := AttribData.cRevival;
rimmunity := AttribData.cimmunity;
rVirtue := AttribData.cVirtue;
rhealth := CurAttribData.Curhealth * 10000 div AttribData.cHealth;
rsatiety := CurAttribData.Cursatiety * 10000 div AttribData.cSatiety;
rpoisoning := CurAttribData.Curpoisoning * 10000 div AttribData.cPoisoning;
rHeadSeak := CurAttribData.CurHeadSeak * 10000 div AttribData.cHeadSeak;
rArmSeak := CurAttribData.CurArmSeak * 10000 div AttribData.cArmSeak;
rLegSeak := CurAttribData.CurLegSeak * 10000 div AttribData.cLegSeak;
ComData.Size := SizeOf (TSAttribValues);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendAttribBase (var AttribData: TAttribData; var CurAttribData: TCurAttribData);
var
ComData : TWordComData;
psAttribBase : PTSAttribBase;
begin
psAttribBase := @ComData.Data;
with psAttribBase^ do begin
rmsg := SM_ATTRIBBASE;
rAge := AttribData.cAge;
rEnergy := AttribData.cEnergy;
rCurEnergy := CurAttribData.CurEnergy;
rInPower := AttribData.cInPower;
rCurInPower := CurAttribData.CurInPower;
rOutPower := AttribData.cOutPower;
rCurOutPower := CurAttribData.CurOutPower;
rMagic := AttribData.cMagic;
rCurMagic := CurAttribData.CurMagic;
rLife := AttribData.cLife;
rCurLife := CurAttribData.CurLife;
ComData.Size := SizeOf (TSAttribBase);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendChangeFeature (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
psChangeFeature : PTSChangeFeature;
psChangeState : PTSChangeState;
begin
if isDynamicObjectID (aSenderInfo.id) then begin
psChangeState := @ComData.Data;
with psChangeState^ do begin
rmsg := SM_CHANGESTATE;
rId := aSenderInfo.id;
rState := aSenderInfo.Feature.rHitMotion;
rFrameStart := aSenderInfo.nx;
rFrameEnd := aSenderInfo.ny;
ComData.Size := SizeOf (TSChangeFeature);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end else begin
psChangeFeature := @ComData.Data;
with psChangeFeature^ do begin
rmsg := SM_CHANGEFEATURE;
rId := aSenderInfo.id;
rFeature := aSenderInfo.Feature;
if rFeature.rrace = RACE_NPC then rFeature.rrace := RACE_MONSTER;
ComData.Size := SizeOf (TSChangeFeature);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
end;
procedure TSendClass.SendChangeProperty (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
psChangeProperty : PTSChangeProperty;
str : String;
begin
psChangeProperty := @ComData.Data;
with psChangeProperty^ do begin
str := StrPas (@aSenderInfo.ViewName);
if aSenderInfo.Guild[0] <> 0 then
str := str + ',' + StrPas (@aSenderInfo.Guild);
if Length (str) >= 18 then str := Copy (str, 1, 18);
rmsg := SM_CHANGEPROPERTY;
rId := aSenderInfo.id;
StrPCopy(@rNameString, str);
ComData.Size := SizeOf (TSChangeProperty);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendEventString (astr: string);
var
ComData : TWordComData;
cnt : integer;
psEventString : PTSEventString;
begin
psEventString := @ComData.Data;
with psEventString^ do begin
rmsg := SM_EVENTSTRING;
SetWordString (rWordString, astr);
ComData.Size := sizeof(TSEventString) - sizeof(TWordString) + sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendUsedMagicString (astr: string);
var
ComData : TWordComData;
cnt : integer;
psEventString : PTSEventString;
begin
psEventString := @ComData.Data;
with psEventString^ do begin
rmsg := SM_USEDMAGICSTRING;
SetWordString (rWordString, astr);
ComData.Size := sizeof(TSEventString) - sizeof(TWordString) + sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendShootMagic (var aSenderinfo: TBasicData; atid: integer; ax, ay, abowimage, abowspeed: word; atype : byte);
var
ComData : TWordComData;
psMovingMagic: PTSMovingMagic;
begin
psMovingMagic := @ComData.Data;
with psMovingMagic^ do begin
rmsg := SM_MOVINGMAGIC;
rsid := aSenderInfo.id;
reid := atid;
rtx := ax;
rty := ay;
rMoveingstyle := 0;
rsf := 0;
rmf := abowimage;
ref := 0;
rspeed := abowspeed; //rspeed := 20;
rafterimage := 0;
rafterover := 0;
rtype := atype;
ComData.Size := SizeOf (TSMovingMagic);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendSayUseMagic (var aSenderinfo: TBasicData; astr: string);
var
ComData : TWordComData;
cnt : integer;
psSay : PTSSay;
begin
psSay := @ComData.Data;
with psSay^ do begin
rmsg := SM_SAYUSEMAGIC;
rId := aSenderInfo.id;
rkind := 0;
SetWordString (rWordString, astr);
ComData.Size := sizeof(TSSay) - sizeof(TWordString) + sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendSay (var aSenderinfo: TBasicData; astr: string);
var
ComData : TWordComData;
cnt : integer;
psSay : PTSSay;
begin
psSay := @ComData.Data;
with psSay^ do begin
rmsg := SM_SAY;
rId := aSenderInfo.id;
rkind := 0;
SetWordString (rWordString, astr);
ComData.Size := sizeof(TSSay) - sizeof(TWordString) + sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendTurn (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
psTurn : PTSTurn;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -