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

📄 usendcls.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -