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

📄 main.pas

📁 解元 传奇2客户端delphi源程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    CM_WALK:Begin
       PlayerInfo.X:=low(msg.recog);
       PlayerInfo.Y:=high(msg.recog);
       PlayerInfo.dir:=msg.Tag;
       dmsg := MakeDefaultMsg (SM_WALK,0,PlayerInfo.x, PlayerInfo.y, PlayerInfo.dir+light*256);
       desc.Feature:=MakeFeature(0,4,2,5,20);
       desc.Status:=0;
       SendSocket(Socket,EncodeMessage(dmsg)+EncodeBuffer(@desc,sizeof(TCharDesc)));

       if (PlayerInfo.X=11) and (playerinfo.Y=14) then
       begin
          Playerinfo.map:='4';
          dmsg := MakeDefaultMsg (SM_NEWMAP, 0, 200, 200, Playerinfo.dir);
          SendSocket(Socket,EncodeMessage(dmsg)+EncodeString(Playerinfo.map));
       end;
    end;
    CM_DEALADDITEM:Begin
       dmsg := MakeDefaultMsg (SM_DEALADDITEM_OK, 0, 0, 0, 0);
       SendSocket(Socket,EncodeMessage(dmsg));
    end;
    CM_TAKEONITEM:Begin
       dmsg := MakeDefaultMsg (SM_TAKEON_OK, 1, 0, 0, 0);
       SendSocket(Socket,EncodeMessage(dmsg));
    end;
    CM_TAKEOFFITEM:Begin
       dmsg := MakeDefaultMsg (SM_TAKEOFF_OK, 1, 0, 0, 0);
       SendSocket(Socket,EncodeMessage(dmsg));
    end;
    CM_TURN:begin
       PlayerInfo.X:=low(msg.Recog);
       PlayerInfo.Y:=high(msg.Recog);
       PlayerInfo.dir:=msg.Tag;
       dmsg := MakeDefaultMsg (SM_TURN, 0, PlayerInfo.x, PlayerInfo.y, makeword(light,PlayerInfo.dir)); //消息,角色编号,X,Y,dir + light
       desc.Feature:=1;
       desc.Status:=0;
       SendSocket(Socket,EncodeMessage(dmsg)+Encodebuffer(@desc,sizeof(TCharDesc)));
    end;
    CM_CREATEGROUP:begin
       dmsg := MakeDefaultMsg (SM_CREATEGROUP_OK, 0, 0, 0, 0);
       SendSocket(Socket,EncodeMessage(dmsg));
    end;
    CM_RUN:Begin
       PlayerInfo.X:=low(msg.Recog);
       PlayerInfo.Y:=high(msg.Recog);
       PlayerInfo.dir:=msg.Tag;
       dmsg := MakeDefaultMsg (SM_RUN, 0, PlayerInfo.x, PlayerInfo.y, makeword(light,PlayerInfo.dir)); //消息,角色编号,X,Y,dir + light
       desc.Feature:=0;
       desc.Status:=0;
       SendSocket(Socket,EncodeMessage(dmsg)+Encodebuffer(@desc,sizeof(TCharDesc)));
    end;
    CM_OPENDOOR:Begin
       dmsg := MakeDefaultMsg (SM_OPENDOOR_OK, 0, msg.param, msg.tag, 0);
       SendSocket(Socket,EncodeMessage(dmsg));
    end;
  end;
end;

procedure TMainForm.AddMsg(S: String);
begin
  Memo1.Lines.add(S);
end;

procedure TMainForm.ProcLogin(Socket: TCustomWinSocket; Data: String);
var
  LoginID,CharName,Certi,VerNum,Str:String;
  dmsg :TDefaultMessage;
  wl:TMessageBodyWL;
  s:string;
begin
  str :=Copy(Data,3,Length(Data)-2);
  LoginID:=Copy(Str,1,Pos('/',Str)-1);
  delete(Str,1,Pos('/',Str));
  CharName:=Copy(Str,1,Pos('/',Str)-1);
  delete(Str,1,Pos('/',Str));
  Certi:=Copy(Str,1,Pos('/',Str)-1);
  delete(Str,1,Pos('/',Str));
  VerNum:=Copy(Str,1,Pos('/',Str)-1);
  dmsg := MakeDefaultMsg (SM_LOGON, 0, PlayerInfo.x, PlayerInfo.Y, MakeWord(light,PlayerInfo.dir));  //参数:消息,角色号(0/1),位置x,位置y,方向
  with wl do
  begin
    lParam1:=1;    //desc.Feature,
    lParam2:=0;    //desc.Status
    lTag1:=0;      //Loword(ltag1)=1则可以组队
    lTag2:=0;
  end;
  AddMsg('Log On!');
  s:='';//EncodeBuffer (@wl,sizeof(TMessageBodyWL));
  SendSocket(Socket,EncodeMessage(dmsg)+s);
end;

procedure TMainForm.BroadcaseSay(ActorID:Integer;data:String);
var
  i:integer;
  dmsg :TDefaultMessage;
  s:String;
begin
  dmsg:=MakeDefaultMsg(SM_HEAR,ActorID,smallint($FF00 or $0000),0,0);
  s:=EncodeMessage(dmsg)+EnCodeString(Data);
  for i:= 0 to ssocket.Socket.ActiveConnections - 1 do
  begin
     SendSocket(ssocket.Socket.Connections[i],s);
  end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var
  i:integer;
  dmsg :TDefaultMessage;
  s:String;
  desc:TCharDesc;
begin

  dmsg := MakeDefaultMsg (SM_SHOWEVENT, 0, 20, 20, 0);
  s:=edit6.text;
  SendSocket(ssocket.Socket.Connections[0],EncodeMessage(dmsg)+EncodeString(s));
  exit;

  dmsg := MakeDefaultMsg (SM_NEWMAP, 0, 20, 20, 0);
  s:=edit6.text;
  SendSocket(ssocket.Socket.Connections[0],EncodeMessage(dmsg)+EncodeString(s));
  exit;

  dmsg := MakeDefaultMsg (SM_WALK, 0, PlayerINfo.x, Playerinfo.Y, 0);
  desc.Feature:=2;
  desc.Status:=0;
  SendSocket(ssocket.Socket.Connections[0],EncodeMessage(dmsg)+EncodeBuffer(@desc,sizeof(TCharDesc)));


  dmsg:=MakeDefaultMsg(strtointdef(edit1.text,0),strtointdef(edit2.text,0),
    strtointdef(edit3.text,0),strtointdef(edit4.text,0),strtointdef(edit5.text,0));
  s:=edit6.text;
  s:=EncodeMessage(dmsg)+EncodeString(s);
  for i:= 0 to ssocket.Socket.ActiveConnections - 1 do
  begin
     SendSocket(ssocket.Socket.Connections[i],s);
  end;
end;

procedure TMainForm.QueryBag(Socket: TCustomWinSocket; Who: String);
var
  dmsg:TDefaultMessage;
  s:String;
  ci:TClientItem;
begin
   dmsg := MakeDefaultMsg (SM_BAGITEMS, 0, 0, 0, 0);
   s:='';
   ci.s.Name:='超级武器';
   ci.s.Looks:=100;
   ci.s.StdMode:=5;
   ci.s.Shape:=45;
   ci.s.AC:=10;
   ci.MakeIndex:=1;
   ci.Dura:=10;
   ci.DuraMax:=20;
   s:=encodebuffer(@ci,sizeof(TClientItem))+'/';
   SendSocket(Socket,EncodeMessage(dmsg)+s);
end;

procedure TMainForm.Button3Click(Sender: TObject);
var
  dmsg:TDefaultMessage;
  s:String;
  ci:TClientItem;
begin
   dmsg := MakeDefaultMsg (SM_ADDITEM, 0, 0, 0, 0);
   s:='';
   ci.s.Name:=edit7.text;
   ci.s.Looks:=strtointdef(edit8.text,0);
   ci.s.StdMode:=strtointdef(edit9.text,0);;
   ci.s.Shape:=strtointdef(edit10.text,0);;
   ci.s.AC:=strtointdef(edit11.text,0);
   ci.s.MAC:=strtointdef(edit12.text,0);
   ci.s.DC:=strtointdef(edit16.text,0);
   ci.s.mc:=strtointdef(edit17.text,0);
   ci.s.SC:=strtointdef(edit18.text,0);
   ci.s.DuraMax:=strtointdef(edit14.text,0);
   ci.s.NeedIdentify:=strtointdef(edit16.text,0);
   ci.MakeIndex:=strtointdef(edit19.text,0);
   ci.Dura:=10;
   ci.DuraMax:=20;
   s:=encodebuffer(@ci,sizeof(TClientItem));
   SendSocket(SSocket.Socket.Connections[0],EncodeMessage(dmsg)+s);
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
var
  i:integer;
  s:String;
begin
  s:='#+GOOD/'+inttostr(gettickcount)+'!';
  for i:= 0 to ssocket.Socket.ActiveConnections - 1 do
  begin
     try
     if ssocket.Socket.Connections[i].Connected then
       ssocket.Socket.Connections[i].SendText(s);
     except
       
     end;
  end;
end;

procedure TMainForm.SSocketClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  timer1.Enabled:=false;
end;

function TMainForm.CheckPassword(Userid, password: string): Integer;
var
  s:string;
begin
  s:=Userinfo.ReadString(UserID,'password','');
  if s='' then begin result:=-1;exit;end;
  if password=s then
     result:=0
  else result:=-2;
end;

function TMainForm.QueryChar(LoginID: String): String;
var
  i:integer;
  s:string;
  charname:string;
begin
  result:='';
  for i:=1 to 2 do
  begin
    charname:=userinfo.readstring(LoginID,'Char'+inttostr(i),'');
    if length(charname)=0 then continue;
    result:=result+charname+'/';
    result:=result+userinfo.ReadString(charname,'job','0')+'/';
    result:=result+userinfo.ReadString(charname,'hair','0')+'/';
    result:=result+userinfo.ReadString(charname,'level','1')+'/';
    result:=result+userinfo.ReadString(charname,'sex','0')+'/';
  end;
end;

procedure TMainForm.GetCharAbility(var Playerinfo: TPlayerinfo);
begin
  with Playerinfo.ab do
  begin
     MP:=UserInfo.ReadInteger(PlayerInfo.CharName,'MP',600);
     MaxMP:=UserInfo.ReadInteger(PlayerInfo.CharName,'MaxMP',900);
     HP:=UserInfo.ReadInteger(PlayerInfo.CharName,'HP',500);
     MaxHP:=UserInfo.ReadInteger(PlayerInfo.CharName,'MaxHP',600);;
     Exp:=UserInfo.ReadInteger(PlayerInfo.CharName,'EXP',1000);;
     MaxExp:=UserInfo.ReadInteger(PlayerInfo.CharName,'MaxExP',1200);;
     Level:=UserInfo.ReadInteger(PlayerInfo.CharName,'Level',1);;
     Weight:=UserInfo.ReadInteger(PlayerInfo.CharName,'Weight',0);;
     MaxWeight:=UserInfo.ReadInteger(PlayerInfo.CharName,'MaxWeight',100);;
     WearWeight:=UserInfo.ReadInteger(PlayerInfo.CharName,'WearWeight',0);;
     MaxWearWeight:=UserInfo.ReadInteger(PlayerInfo.CharName,'MaxWearWeight',100);;
     HandWeight:=UserInfo.ReadInteger(PlayerInfo.CharName,'HandWeight',0);;
     MaxHandWeight:=UserInfo.ReadInteger(PlayerInfo.CharName,'MaxHandWeight',100);
     AC:=UserInfo.ReadInteger(PlayerInfo.CharName,'AC',20);;
     MAC:=UserInfo.ReadInteger(PlayerInfo.CharName,'MAC',30);;
     DC:=UserInfo.ReadInteger(PlayerInfo.CharName,'DC',30);;
     SC:=UserInfo.ReadInteger(PlayerInfo.CharName,'SC',25);;
     MC:=UserInfo.ReadInteger(PlayerInfo.CharName,'MC',15);;
  end;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  UserInfo.Free;
end;

end.

⌨️ 快捷键说明

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