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

📄 ladmin

📁 最新的仙镜传说服务器C语言源码
💻
📖 第 1 页 / 共 2 页
字号:
			searchaccount($cmdlist[1],$cmdlist[2]);
		}elsif("state"=~/^\Q$cmdlist[0]/){
			changestate($cmdlist[1],$cmdlist[2]);
		}elsif($cmdlist[0]){
			print "Unknown command [".$cmdlist[0]."]\n";
		}
#		$term->addhistory($cmd) if $cmdlist[0];
	};
	if($@){
		print "Error [".$cmdlist[0]."]\n$@";
	}
};

# 廔椆張棟
quit();

print "bye.\n";
exit(0);



#--------------------------------------------------------------------------

# 傾僇僂儞僩儕僗僩昞帵
sub listaccount(){
	my($st,$ed)= @_;
	print $so pack("vV2c",0x7920,$st,$ed,0);
	$so->flush();
	$buf=readso(4);
	if(unpack("v",$buf)!=0x7921){
		print "List failed.\n";
		exit(10);
	}
	#      0123456789 012345678901234567890123 012345 
	print "account_id user_id                  gender count state\n";
	print "-------------------------------------------------------\n";
	my($i);
	my($len)=unpack("x2v",$buf);
	for($i=4;$i<$len;$i+=61){
		my(@dat)=unpack("Va24ca24VV",readso(61));
		printf "%10d %-24s %-6s%6d %-6s\n",$dat[0],$dat[1],
			("Female","Male","Server")[$dat[2]],$dat[4],
			("Normal","Banned")[$dat[5]?1:0];
	}
	return 0;
}
# 傾僇僂儞僩捛壛
sub addaccount(){
	my($userid,$sex,$passwd)= @_;
	if($userid=~/[^A-Za-z0-9\@-_]/){
		print "Illeagal charactor found in user_id ".$`."[${&}]${'}\n";
		return 101;
	}
	if(length($userid)<4 || length($userid)>24){
		print "Account id too short or long. please input 4-24bytes.\n";
		return 102;
	}
	$sex=uc(substr($sex,0,1));
	if( $sex!~/^[MF]$/ ){
		print "Illeagal gender [$sex] please input M or F.\n";
		return 103;
	}
	if($passwd eq ""){
		return 108 if( ($passwd=typepasswd()) eq "" );
	}
	if($passwd=~/[\x00-\x1f]/){
		my($c)=length($`)+1;
		print "Illeagal charactor found in password (".makeordinal($c)." charactor).\n";
		return 104;
	}
	if(length($passwd)<4){
		print "Password too short or long. please input 4-24bytes.!\n";
		return 105;
	}
	print $so pack("v2a24a24a1", 0x7930,53, $userid,$passwd,$sex );
	$so->flush();
	$buf=readso(2);
	if(unpack("v",$buf)!=0x7931){
		print "Packet error.\n";
		return 106;
	}
	$buf=readso(26);
	print "Account [$userid] ";
	if(unpack("v",$buf)!=0){
		print "creation failed. same account exists.\n";
		return 107;
	}else{
		print "is successfully created.\n";
	}
	return 0;
}
# 傾僇僂儞僩嶍彍
sub delaccount(){
	my($userid)= @_;
	print "** Are you really sure to DELETE account [$userid]? (y/n) ";
	if(lc(substr(<STDIN>,0,1)) ne "y"){
		return 121;
	}
	print $so pack("v2a24", 0x7932,28, $userid);
	$so->flush();
	$buf=readso(2);
	if(unpack("v",$buf)!=0x7933){
		print "Packet error.\n";
		return 122;
	}
	$buf=readso(26);
	print "Account [$userid] ";
	if(unpack("v",$buf)!=0){
		print "deletion failed. account dosent exist.\n";
		return 123;
	}else{
		print "is successfully DELETED.\n";
	}
	return 0;
}
# 傾僇僂儞僩僷僗儚乕僪曄峏
sub changepasswd(){
	my($userid,$passwd)= @_;
	if($userid eq ""){
		print "Please input account id.\n";
		return 136;
	}
	if($passwd eq ""){
		return 134 if( ($passwd=typepasswd()) eq "" );
	}
	if(length($passwd)<4){
		print "New password too short or long. please input 4-24bytes.!\n";
		return 131;
	}
	if($passwd=~/[\x00-\x1f]/){
		my($c)=length($`)+1;
		print "Illeagal charactor found in password (".makeordinal($c)." charactor).\n";
		return 135;
	}
	print $so pack("v2a24a24", 0x7934,52, $userid,$passwd);
	$so->flush();
	$buf=readso(2);
	if(unpack("v",$buf)!=0x7935){
		print "Packet error.\n";
		return 132;
	}
	$buf=readso(26);
	print "Account [$userid] ";
	if(unpack("v",$buf)!=0){
		print "password changing failed. account dosent exist.\n";
		return 133;
	}else{
		print "password successfully changed.\n";
	}
	return 130;
}
# 傾僇僂儞僩専嶕
sub searchaccount(){
	my($p1,$p2)= @_;
	my($exp,$st,$n)=("",0,0);
	if($p1 eq"-e" || $p1 eq"-r" || $p1 eq"--regex" || $p1 eq"--expr"){
		$exp=$p2;
	}else{
		my($c)=0;
		$exp=$p1;
		$exp=~s/([\@])/\\$1/g;
		$c+= $exp=~s/([\-\[\]])/\\$1/g;
		$c+= $exp=~s/([\*\?])/.$1/g;
		$c+= $exp=~s/\\\[(.)\\\-(.)\\\]/[$1-$2]/g;
		$exp="^$exp\$" if $c;
	}
	if( eval{ ""=~/$exp/; }, $@ ){
		print "Regular-Expression compiling failed.\n";
		return 141;
	}
	#      0123456789 012345678901234567890123 012345 
	print "account_id user_id                  gender count state\n";
	print "-------------------------------------------------------\n";
	while(1){
		print $so pack("vV2c",0x7920,$st,0,0);
		$so->flush();
		$buf=readso(4);
		if(unpack("v",$buf)!=0x7921){
			print "Search failed.\n";
			exit(10);
		}
		my($i);
		my($len)=unpack("x2v",$buf);
		last if($len<=4);
		for($i=4;$i<$len;$i+=61){
			my(@dat)=unpack("Va24ca24VV",readso(61));
			$st=$dat[0]+1;
			next if( $dat[1]!~/$exp/ );
			printf "%10d %-24s %-6s%6d %-6s\n",$dat[0],$dat[1],
				("Female","Male","Server")[$dat[2]],$dat[4],
				("Normal","Banned")[$dat[5]?1:0];
			$n++;
		}
	}
	print "$n account(s) found.\n";
	return 0;
}
# 僶儞忬懺曄峏梫媮
sub changestate {
	my($userid,$s)= @_;
	my(%p)=("n"=>0,"u"=>0,"b"=>1);
	if($s eq ""){
		print "Please input new state [b] or [n].\n";
		return 151;
	}
	$s=lc(substr($s,0,1));
	if(exists $p{$s}){ $s=$p{$s}; }
	else{ $s=int($s); }
	print $so pack("vva24V",0x7936,32,$userid,$s);
	$so->flush();
	$buf=readso(2);
	if(unpack("v",$buf)!=0x7937){
		print "Packet error.\n";
		return 152;
	}
	$buf=readso(30);
	my(@dat)=unpack("va24V",$buf);
	if($dat[0]==0){
		print "account [$userid] is successfully ".
		( ("Unbanned","Banned")[$dat[2]?1:0]).".\n";
	}else{
		print "account [$userid] state changing failed. (".
			(( "Normal","Banned" )[$dat[2]?1:0]) .")\n";
	}

}
# 愗抐梫媮
sub quit(){
	print $so pack("v",0x7532);
	$so->flush();
}
# READY怣崋懸偪乮枹巊梡乯
sub waitready(){
	$buf=readso(2);
	if(unpack("v",$buf)!=0x791f){
		print "Command stream error.\n";
		exit(9);
	}
	return 0;
}
# 昗弨弌椡偺僼儔僢僔儏(枹巊梡)
sub flush_stdout {
	$|=1;
	$|=0;
}

# 僜働僢僩偐傜僨乕僞傪撉傒弌偡
sub readso(){
	my($len)=shift;
	my($buf);
	if( read($so,$buf,$len)<$len ){
		print "Socket read error.\n";
		exit(3);
	}
	return $buf;
}


# 僷僗儚乕僪擖椡
sub typepasswd {
	my($passwd1,$passwd2);
	cbreak();
	print "type password > "; $passwd1=<STDIN>; chomp($passwd1); print "\n";
	print "verify password > "; $passwd2=<STDIN>; chomp($passwd2); print "\n";
	cooked();
	if($passwd1 ne $passwd2){
		print "Password verification failed. Please input same password.\n";
		return "";
	}
	return $passwd1;
}
# 彉悢嶌惉
sub makeordinal {
	my($c)= shift;
	if($c%10<4 && $c%10!=0 && ($c<10 || $c>20) ){
		return $c.("st","nd","rd")[$c%10-1];
	}
	return $c."th";
}

⌨️ 快捷键说明

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