诛仙管理员连接Gdeliveryd服务器发送邮件的Java实现

概要:

连接Gdeliveryd服务器,可以通过Socket建立邮件信息,向角色发送带有物品装备的邮件,Socket是一个和语言无关的协议,大多数语言比如C/C++/PHP/VB等都支持Socket,这里使用Java实现,适用于诛仙2和诛仙3

| |目录

诛仙给角色发送物品装备邮件的代码,通过Socket连接Gdeliveryd服务器,建立邮件信息:

package com.zhenzhigu.gm.zx;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class MailUtils {

	/**
	 * 把0到255的整数转为十六进制
	 * 如果是1位则补到2位,如e补位之后是0e
	 */
	private static String intToHex2(int n){
		String hex = Integer.toHexString(n);
		if(hex.length()==1){
			hex = "0"+hex;
		}
		return hex;
	}
	/**
	 * 把0-65535的整数转为十六进制,补位到4位,例如e补位之后是0e:00
	 */
	private static String intToHex4(int n){
		String hex = Integer.toHexString(n);
		if(hex.length()==1){
			hex = "0"+hex+":00";
		}else if(hex.length()==2){
			hex += ":00";
		}else if(hex.length()==3){
			String a = hex.substring(0, 1);
			String b = hex.substring(1,3);
			hex = "0"+a+":"+b;
		}else if(hex.length()==4){
			String a = hex.substring(0, 2);
			String b = hex.substring(2,4);
			hex = a+":"+b;
		}else{
			System.out.println("err:"+hex+":"+n);
		}
		return hex;
	}
	
	/**
	 * 标题与内容转为十六进制
	 * @param str
	 * @return
	 */
	private static String stringToHex(String str){
		StringBuffer sb = new StringBuffer();
		char[] crr = str.toCharArray();
		for(int i=0;i<crr.length;i++){
			int n = crr[i];
			String hex = Integer.toHexString(n);
			if(hex.length()==2){
				hex += ":00";
			}else{
				String a = hex.substring(0, 2);
				String b = hex.substring(2,4);
				hex = b+":"+a;
			}
			sb.append(hex);
			if(i<crr.length-1){
				sb.append(":");
			}
		}
		return sb.toString();
	}
	
	private static String getHex(int receiver,int item,int number,String title,String text,int protect){
		String pst = "00:00";
		switch (protect) {
		case 0:pst="00:00";break;//[无保护类型=00:00]
		case 1:pst="00:40";break;//[装备后绑定=00:40]
		case 2:pst="00:93";break;//[已绑定状态=00:93]
		case 3:pst="02:53";break;//[下线后消失=02:53]
		default:break;
		}
		String str = 
				"90:76:xx:80:00:00:06:00:00:04:00:03:00:00:"
				+ intToHex4(receiver)											//收件人
				+ ":" + intToHex2(title.toCharArray().length*2)					//标题长度
				+ ":" + stringToHex(title)										//标题正文
				+ ":" + intToHex2(text.toCharArray().length*2)					//内容长度
				+ ":" + stringToHex(text)										//内容正文
				+ ":00:00:"
				+ intToHex4(item) 												//物品ID
				+ ":00:00:00:00:00:00:"
				+ intToHex4(number)
				+ ":00:00:"
				+ intToHex4(number)
				+ ":00:00:00:"
				+ pst	
				+ ":00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00";

		str=str.replaceAll("xx", intToHex2(((str.length()+1)/3)-3));
		
		return str;
	
	}
	
	/**
	 * 发送邮件
	 * @param receiver 	收件人ID
	 * @param item		物品ID
	 * @param number	物品数量
	 * @param title		邮件标题
	 * @param text		邮件内容(不要超过100字)
	 * @param protect	保护类型:[0=无][1=装备后绑定][2=已绑定][3=下线后消失]
	 * @throws UnknownHostException
	 * @throws IOException
	 */
	public static void send(int receiver,int item,int number,String title,String text,int protect) throws UnknownHostException, IOException{
		
		String hex = getHex(receiver, item, number, title, text,protect);
		System.out.println(hex);
		//连接Gdeliveryd服务器,建立邮件信息
		Socket sc = new Socket("192.168.200.100", 29100);
		OutputStream out = sc.getOutputStream();
		byte[] bf = new byte[1024];
		String[] srr = hex.split(":");
		for(int i=0;i<srr.length;i++){
			bf[i] = (byte) Integer.parseInt(srr[i], 16);  
		}
		
		out.write(bf, 0, srr.length);
		out.close();
	}
	
	public static void main(String[] args) throws UnknownHostException, IOException {
		
		/**
		 * 强化真仙散仙用补天符:4006
		 * 强化白装用炼器符:685
		 * 强化神魔装用龙魂符:21200
		 * 强化封神装用天机符: 56030
		 * 
		 * 仙豆:18794							
		 * 龙牙草:20481(修炼宠物斗气=2仙豆)
		 * 天龙草:20484(修炼宠物斗气=50龙牙草)
		 * 九转阴阳幡:19183 (更改宠物前世)				
		 * 易筋断骨丹:16320 (更改宠物限界)
		 */
		
		int receiver = 1072;	//角色ID
		int item = 18794;		//物品ID
		int number = 99;		//物品数量
		String title = "鸿蒙快递,请查收";
		String text = "这是您在鸿蒙宝库购买的商品,请查收!";
		
		MailUtils.send(receiver,item,number,title,text,0);
		//MailUtils.send(1024, 8079, 9999, "恭喜您获得奖品", "这是GM发送给您的奖品,请注意查收附件!", 3);
	}


}


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消