📄 usendcls.pas
字号:
begin
psTurn := @ComData.Data;
with psTurn^ do begin
rmsg := SM_TURN;
rId := aSenderInfo.id;
rdir := aSenderInfo.dir;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
ComData.Size := SizeOf (TSTurn);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendMove (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
psMove : PTSMove;
begin
psMove := @ComData.Data;
with psMove^ do begin
rmsg := SM_MOVE;
rId := aSenderInfo.id;
rdir := aSenderInfo.dir;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
ComData.Size := SizeOf (TSMove);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendSetPosition (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
psSetPosition : PTSSetPosition;
begin
psSetPosition := @ComData.Data;
with psSetPosition^ do begin
rmsg := SM_SETPOSITION;
rid := aSenderInfo.id;
rdir := aSenderInfo.dir;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
ComData.Size := SizeOf (TSSetPosition);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendMap (var aSenderInfo: TBasicData; amap, aobj, arof, atil, aSoundBase: string);
var
ComData : TWordComData;
psNewMap : PTSNewMap;
begin
SendSoundBase ('', 100);
psNewMap := @ComData.Data;
FillChar (psNewMap^, SizeOf (TSNewMap), 0);
with psNewMap^ do begin
rmsg := SM_NEWMAP;
StrPCopy (@rMapName, aMap);
StrCopy (@rCharName, @aSenderInfo.ViewName);
rId := aSenderInfo.id;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
StrPCopy (@rObjName, aobj);
StrPCopy (@rRofName, arof);
StrPCopy (@rTilName, atil);
ComData.Size := SizeOf (TSNewMap);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
if aSoundBase <> '' then begin
SendSoundBase (aSoundBase + '.wav', 100);
end;
end;
procedure TSendClass.SendShow (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
i, cnt : integer;
psShow : PTSShow;
psShowItem : PTSShowItem;
psShowDynamicObject : PTSShowDynamicObject;
str : shortstring;
dod : TDynamicObjectData;
begin
if aSenderInfo.ClassKind = CLASS_SERVEROBJ then exit;
if (aSenderInfo.Feature.rrace = RACE_HUMAN) or (aSenderInfo.Feature.rRace = RACE_MONSTER)
or (aSenderInfo.Feature.rRace = RACE_NPC) then begin
psShow := @ComData.Data;
with psShow^ do begin
str := StrPas (@aSenderInfo.ViewName);
if aSenderInfo.Guild[0] <> 0 then
str := str + ',' + StrPas (@aSenderInfo.Guild);
rmsg := SM_SHOW;
rId := aSenderInfo.id;
StrPCopy (@rNameString, str);
rdir := aSenderInfo.dir;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
rFeature := aSenderInfo.Feature;
if rFeature.rrace = RACE_NPC then rFeature.rrace := RACE_MONSTER;
SetWordString (rWordString, '');
ComData.Size := sizeof(TSShow)-sizeof(twordstring)+sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
exit;
end;
if (aSenderInfo.Feature.rRace = RACE_ITEM)
or (aSenderInfo.Feature.rRace = RACE_STATICITEM) then begin
psShowItem := @ComData.Data;
with psShowItem^ do begin
rmsg := SM_SHOWITEM;
rid := aSenderInfo.id;
rNameString := aSenderInfo.ViewName;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
rShape := aSenderInfo.Feature.rImageNumber;
rColor := aSenderInfo.Feature.rImageColorIndex;
rRace := aSenderInfo.Feature.rRace;
ComData.Size := SizeOf (TSShowItem);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
exit;
end;
if aSenderInfo.Feature.rrace = RACE_DYNAMICOBJECT then begin
psShowDynamicObject := @ComData.Data;
FillChar (psShowDynamicObject^, SizeOf (TSShowDynamicObject), 0);
DynamicObjectClass.GetDynamicObjectData (StrPas (@aSenderInfo.Name), dod);
with psShowDynamicObject^ do begin
rmsg := SM_SHOWDYNAMICOBJECT;
rid := aSenderInfo.id;
rNameString := aSenderInfo.ViewName;
rx := aSenderInfo.x;
ry := aSenderInfo.y;
rShape := aSenderInfo.Feature.rImageNumber;
rState := aSenderInfo.Feature.rHitMotion;
rFrameStart := aSenderInfo.nx;
rFrameEnd := aSenderInfo.ny;
ComData.Size := SizeOf (TSShowDynamicObject);
end;
for i := 0 to 10 - 1 do begin
if (dod.rGuardX [i] = 0) and (dod.rGuardY [i] = 0) then break;
psShowDynamicObject^.rGuardX [i] := dod.rGuardX [i];
psShowDynamicObject^.rGuardY [i] := dod.rGuardY [i];
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
exit;
end;
end;
procedure TSendClass.SendHide (var aSenderinfo: TBasicData);
var
ComData : TWordComData;
psHide : PTSHide;
begin
if aSenderInfo.ClassKind = CLASS_SERVEROBJ then exit;
psHide := @ComData.Data;
with psHide^ do begin
rmsg := SM_HIDE;
if isObjectItemId (aSenderInfo.id) or isStaticItemId (aSenderInfo.id) then rmsg := SM_HIDEITEM;
if isDynamicObjectID (aSenderInfo.id) then rmsg := SM_HIDEDYNAMICOBJECT;
rid := aSenderInfo.id;
ComData.Size := SizeOf (TSHide);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendMotion (aid, amotion: integer);
var
ComData : TWordComData;
psMotion : PTSMotion;
begin
psMotion := @ComData.Data;
with psMotion^ do begin
rmsg := SM_MOTION;
rId := aid;
rmotion := amotion;
ComData.Size := SizeOf (TSMotion);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendStructed (var aSenderInfo : TBasicData; aPercent: integer);
var
ComData : TWordComData;
psStructed : PTSStructed;
begin
psStructed := @ComData.Data;
with psStructed^ do begin
rmsg := SM_STRUCTED;
rId := aSenderInfo.ID;
if aSenderInfo.Feature.rRace <> RACE_DYNAMICOBJECT then begin
rRace := RACE_HUMAN;
end else begin
rRace := aSenderInfo.Feature.rRace;
end;
rpercent := apercent;
ComData.Size := SizeOf (TSStructed);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendChatMessage (astr: string; aColor: byte);
var
ComData : TWordComData;
cnt : integer;
psChatMessage : PTSChatMessage;
begin
psChatMessage := @ComData.Data;
with psChatMessage^ do begin
rmsg := SM_CHATMESSAGE;
case acolor of
SAY_COLOR_NORMAL : begin rFColor := WinRGB (22,22,22); rBColor := WinRGB (0, 0 ,0); end;
SAY_COLOR_SHOUT : begin rFColor := WinRGB (22,22,22); rBColor := WinRGB (0, 0 ,24); end;
SAY_COLOR_SYSTEM : begin rFColor := WinRGB (22,22, 0); rBColor := WinRGB (0, 0 ,0); end;
SAY_COLOR_NOTICE : begin rFColor := WinRGB (255 div 8, 255 div 8, 255 div 8); rBColor := WinRGB (133 div 8, 133 div 8, 133 div 8); end;
SAY_COLOR_GRADE0 : begin rFColor := WinRGB (18, 16, 14); rBColor := WinRGB (2,4,5); end;
SAY_COLOR_GRADE1 : begin rFColor := WinRGB (26, 23, 21); rBColor := WinRGB (2,4,5); end;
SAY_COLOR_GRADE2 : begin rFColor := WinRGB (31, 29, 27); rBColor := WinRGB (2,4,5); end;
SAY_COLOR_GRADE3 : begin rFColor := WinRGB (22, 18, 8); rBColor := WinRGB (1,4,11); end;
SAY_COLOR_GRADE4 : begin rFColor := WinRGB (23, 13, 4); rBColor := WinRGB (1,4,11); end;
SAY_COLOR_GRADE5 : begin rFColor := WinRGB (31, 29, 21); rBColor := WinRGB (1,4,11); end;
else begin rFColor := WinRGB (22,22,22); rBColor := WinRGB (0, 0 ,0); end;
end;
SetWordString (rWordstring, aStr);
ComData.Size := Sizeof(TSChatMessage) - Sizeof(TWordString) + sizeofwordstring(rWordString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendStatusMessage (astr: string);
var
ComData : TWordComData;
cnt : integer;
psMessage : PTSMessage;
begin
psMessage := @ComData.Data;
with psMessage^ do begin
rmsg := SM_MESSAGE;
rkey := MESSAGE_GAMEING;
SetWordString (rWordstring, astr);
ComData.Size := Sizeof(TSMessage) - Sizeof(TWordString) + sizeofwordstring(rWordString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendHaveItem (akey: word; var ItemData: TItemData);
var
ComData : TWordComData;
psHaveItem : PTSHaveItem;
begin
psHaveItem := @ComData.Data;
with psHaveItem^ do begin
rmsg := SM_HAVEITEM;
rkey := akey;
rName := ItemData.rViewName;
rCount := ItemData.rCount;
rColor := Itemdata.rcolor;
rShape := Itemdata.rShape;
ComData.Size := SizeOf (TSHaveItem);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendWearItem (akey: word; var ItemData: TItemData);
var
ComData : TWordComData;
psWearItem : PTSHaveItem;
begin
psWearItem := @ComData.Data;
with psWearItem^ do begin
rmsg := SM_WEARITEM;
rkey := akey;
rName := Itemdata.rViewName;
rColor := Itemdata.rcolor;
rShape := Itemdata.rShape;
ComData.Size := SizeOf (TSHaveItem);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
if aKey = 1 then begin
with psWearItem^ do begin
rmsg := SM_WEARITEM;
rkey := 5;
rName := Itemdata.rViewName;
rColor := Itemdata.rcolor;
rShape := Itemdata.rShape;
ComData.Size := SizeOf (TSHaveItem);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
end;
procedure TSendClass.SendHaveMagic (akey: word; var MagicData: TMagicData);
var
ComData : TWordComData;
psHaveMagic : PTSHaveMagic;
begin
psHaveMagic := @ComData.Data;
with psHaveMagic^ do begin
rmsg := SM_HAVEMAGIC;
rkey := akey;
rShape := MagicData.rShape;
rName := MagicData.rname;
rSkillLevel := MagicData.rcSkillLevel;
rpercent := 0;
ComData.Size := SizeOf (TSHaveMagic);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendBasicMagic (akey: word; var MagicData: TMagicData);
var
ComData : TWordComData;
psHaveMagic : PTSHaveMagic;
begin
psHaveMagic := @ComData.Data;
with psHaveMagic^ do begin
rmsg := SM_BASICMAGIC;
rkey := akey;
rShape := Magicdata.rShape;
rName := MagicData.rname;
rSkillLevel := Magicdata.rcSkillLevel;
rpercent := 0;
ComData.Size := SizeOf (TSHaveMagic);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendSoundEffect (asoundname: string; ax, ay : Word);
var
ComData : TWordComData;
psSoundString: PTSSoundString;
begin
psSoundString := @ComData.Data;
with psSoundString^ do begin
rmsg := SM_SOUNDEFFECT;
rHiByte := Length (asoundname);
rLoByte := 0;
StrPCopy (@rSoundName, asoundname);
rX := ax;
rY := ay;
ComData.Size := SizeOf (TSSoundString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendSoundBase (asoundname: string; aRoopCount: integer);
var
ComData : TWordComData;
cnt : integer;
psSoundBaseString: PTSSoundBaseString;
begin
psSoundBaseString := @ComData.Data;
with psSoundBaseString^ do begin
rmsg := SM_SOUNDBASESTRING;
rRoopCount := aroopcount;
SetWordString (rWordString, asoundname);
ComData.Size := Sizeof(TSSoundBaseString) - Sizeof(TWordString) + sizeofwordstring(rWordString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendSoundBase2 (asoundname: string; aRoopCount: integer);
var
ComData : TWordComData;
cnt : integer;
psSoundBaseString: PTSSoundBaseString;
begin
psSoundBaseString := @ComData.Data;
with psSoundBaseString^ do begin
rmsg := SM_SOUNDBASESTRING2;
rRoopCount := aroopcount;
SetWordString (rWordString, aSoundName);
ComData.Size := Sizeof(TSSoundBaseString) - Sizeof(TWordString) + sizeofwordstring(rWordString);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendShowSpecialWindow (aWindow : Byte; aCaption : String; aComment : String);
var
ComData : TWordComData;
pSShowSpecialWindow : PTSShowSpecialWindow;
begin
psShowSpecialWindow := @ComData.Data;
with psShowSpecialWindow^ do begin
rmsg := SM_SHOWSPECIALWINDOW;
rWindow := aWindow;
StrPCopy (@rCaption, aCaption);
SetWordString (rWordString, aComment);
ComData.Size := sizeof(TSShowSpecialWindow) - sizeof(TWordString) + sizeofwordstring(rwordstring);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendLogItem (akey: word; var ItemData: TItemData);
var
ComData : TWordComData;
psLogItem : PTSLogItem;
begin
psLogItem := @ComData.Data;
with psLogItem^ do begin
rmsg := SM_LOGITEM;
rkey := aKey;
rName := ItemData.rViewName;
rCount := ItemData.rCount;
rColor := Itemdata.rcolor;
rShape := Itemdata.rShape;
ComData.Size := SizeOf (TSLogItem);
end;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendShowGuildMagicWindow (aMagicWindowData : PTSShowGuildMagicWindow);
var
ComData : TWordComData;
begin
ComData.Size := SizeOf (TSShowGuildMagicWindow);
Move (aMagicWindowData^, ComData.Data, SizeOf (TSShowGuildMagicWindow));
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
procedure TSendClass.SendNetState (aID, aTick : Integer);
var
ComData : TWordComData;
pSNetState : PTSNetState;
begin
ComData.Size := SizeOf (TSNetState);
pSNetState := @ComData.Data;
pSNetState^.rMsg := SM_NETSTATE;
pSNetState^.rID := aID;
pSNetState^.rMadeTick := aTick;
Connector.AddSendData (@ComData, ComData.Size + SizeOf (Word));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -