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

📄 sys.cgi

📁 web大航海时代源码,很简短
💻 CGI
字号:
# Sub Get Me #
sub get_me {
	return if $getmeflag;
	
	my $save = $_[1] ? 'read' : 'save';
	$Myfile = new Nfile("$usrdir\/$_[0]\.dat",$save);
	@ilines = $Myfile->read;
	if (!@ilines) { &error("ID $_[0] 讀取錯誤"); }
	if ($ilines[0] eq "Read Error") { &error("ID不存在"); }
	my $userline = shift(@ilines);
	($id,$name,$pass,$sex,$money,$atk,$cmd,$nav,$adven,$piracy,$trade,$food,$sailor,$load,$ship_line,
	 $area,$port,$point,$tactics,$record,$quest_flag,$quest_line,$friend_line,$battle_line,
	 $last,$moved,$end_quest,$intro,$mail,$url,$host,$os,$ip,$bz,$action,$item_line,$city_line,$reserv,$aexp,$pexp,$texp) = split(/<>/,$userline);
	@ship_ind = split(/△/,$ship_line);
	$t_item = 0;
	while ($item_line =~ /,/g) { $t_item++; }
	if ($F{'ps'} eq $adps)	    { $error = 1 }
	if (&get_crypt($F{'ps'},$pass)) { $error = 1 }
	&error("密碼錯誤") if !$error;
	$getmeflag = 1;
}

# Sub Get U #
sub get_u {
	undef $dead;
	my $save = $_[1] ? 'read' : 'save';
	$Ufile = new Nfile("$usrdir\/$_[0]\.dat",$save);
	@ulines = $Ufile->read;
	if ($ulines[0] eq "Read Error") { &fr_del($_[0]); }
	return(0) if $dead;
	my $userline = shift(@ulines);
	($uid,$uname,$upass,$usex,$umoney,$uatk,$ucmd,$unav,$uadven,$upiracy,$utrade,$ufood,$usailor,$uload,$uship_line,
	 $uarea,$uport,$upoint,$utactics,$urecord,$uquest_flag,$uquest_line,$ufriend_line,$ubattle_line,
	 $ulast,$umoved,$uend_quest,$uintro,$umail,$uurl,$uhost,$uos,$uip,$ubz,$uaction,$uitem_line,$ucity_line,$ureserv,$uaexp,$upexp,$utexp) = split(/<>/,$userline);
	@uship_ind = split(/△/,$uship_line);
	$ut_item = 0;
	while ($uitem_line =~ /,/g) { $ut_item++; }
	return(1);
}


# Sub Set Me #
sub set_me {
	$ship_line = join('△',@ship_ind);
	my $userline  = join('<>',$id,$name,$pass,$sex,$money,$atk,$cmd,$nav,$adven,$piracy,$trade,
				$food,$sailor,$load,$ship_line,$area,$port,$point,$tactics,
				$record,$quest_flag,$quest_line,$friend_line,$battle_line,
				$last,$moved,$end_quest,$intro,$mail,$url,$host,$os,$ip,$bz,$action,$item_line,$city_line,$reserv,$aexp,$pexp,$texp,"\n");
	unshift (@ilines,$userline);
	if (!$id || $#ilines < 0) { return }
	$Myfile->write(@ilines);
	undef $getmeflag;
}

# Sub Set U #
sub set_u {
	$uship_line = join('△',@uship_ind);
	my $userline  = join('<>',$uid,$uname,$upass,$usex,$umoney,$uatk,$ucmd,$unav,$uadven,$upiracy,$utrade,
				$ufood,$usailor,$uload,$uship_line,$uarea,$uport,$upoint,$utactics,
				$urecord,$uquest_flag,$uquest_line,$ufriend_line,$ubattle_line,
				$ulast,$umoved,$uend_quest,$uintro,$umail,$uurl,$uhost,$uos,$uip,$ubz,$uaction,$uitem_line,$ucity_line,$ureserv,$uaexp,$upexp,$utexp,"\n");
	unshift (@ulines,$userline);
	if (!$uid || $#ulines < 0) { return }
	$Ufile->write(@ulines);
}

# Sub Get All Users #
sub get_all_users {
	return if $getallusersflag;
	opendir(DIR,"$usrdir") || &error("ユーザデータ讀取錯誤:$usrdirという名前のユーザデータ用ディレクトリが無いかパーミッションが不正です");
	@userfiles = sort grep /\.dat/,readdir(DIR);
	closedir(DIR);
	foreach (@userfiles) {
		open(IN,"$usrdir\/$_") || &error("\/$_無法開啟");
		$line = <IN>;
		push(@alllines,$line);
		close(IN);
	}
	$getallusersflag = 1;
}

# Sub Friend Delete #
sub fr_del {
	$dead = 1;
	if ($F{'id'}) {
		&get_me($F{'id'});
		my @friend = split(/△/,$friend_line);
		@friend = grep { $_[0] != (split(/,/))[0] } @friend;
		$friend_line = join('△',@friend);
		&set_me;
		&error("$_[0]帳戶不存在")
	}
	else { &error("$_[0]帳戶不存在") }
}

# Sub Get Cryptogram #
sub get_crypt {
	if (!$def_cp) { if ($_[0] eq $_[1]) { return 1 } else { return 0 } }
	my $salt  = substr($_[1],0,2);
	if ($_[1] eq crypt($_[0],$salt))	{ return 1 } else { return 0 }
}

# Sub Table #第一=上or下、第二=幅、第三=境界
sub form_table {
if($_[0] eq 'up') {
print <<TAB;
	<center><form method=$method action=$seacgi>
	<table width="$_[1]" border="$_[2]" bgcolor=$t_bgcol bordercolor=$bdcol cellspacing=0>
	<tr><td align=center>
TAB
}
if($_[0] eq 'down') {
print <<TAB;
	</td></tr>
	</table></form>
	</center>
TAB
}
}

# Sub Submit Button #
sub submit_button {
	print qq|<input type=submit value="OK" class=button>\n|;
}

# Sub Return Button #
sub return_button {
	print qq|<center><form method=$method action=$seacgi><input type="button" value="返回" onClick="history.back()"></form></center>\n|;
}

# Sub Home Button #
sub home_button {
	if (!$def_ho) { return }
	print qq|<center><a href=$hom_url target=$hom_tgt>$hom_lbl</a><br></center>\n|;
}

# Sub ID & Password #
sub id_ps {
	print qq|<input type=hidden name=id value="$F{'id'}">\n|;
	print qq|<input type=hidden name=ps value="$F{'ps'}">\n|;
}

# Sub Reload #
sub reload {
	$action = rand(1000) if !$reloadflag;
	print qq|<input type=hidden name=reload value="$action">\n|;
	$reloadflag = 1;
}

# Sub Header #
sub header {
print <<HEAD;
Content-type: text/html

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>$title</title>
<SCRIPT LANGUAGE="JavaScript">
<!--
	var w = window;
	function opWin(url,wname){
	if ((w == window) || w.closed) {
		w = open(url,wname,"scrollbars=yes,resizable=yes,width=$smw_wth,height=$smw_hgt");
	} else {
		w.location.replace(url);
		w.focus();
	}
	return(false);
	}
//-->
</SCRIPT>
</head>$body
HEAD
	$headflag = 1;
}

# Sub Footer #
sub footer {
	if ($_[0]) {
		print qq|<br>\n</body>\n</html>\n|;
	}
	else {
        # 著作権表示。絶対に消さないで下さい!
        # ここにリンクを貼る場合、・・・・と同じ行にせず、
        # 必ず改行を行って別行にしてください。
        # 改造者のリンクを貼る場合、改造者の前に必ず「Edit:」をつけること。
	print qq|<br><center>ネット航海時代 Ver $ver<br>\n|;
	print qq|<a href="http://www.kosumi.vxx.jp/" target="_blank" title="ネット航海時代・配布元">Net Castle</a>|;
	print qq|<br>中文化Edit:<a href="http://www.2233.idv.tw/viewforum.php?f=115" target="_blank" title="水色論壇 WebGame技術專區">BSM</a>|;
	print qq|</font></center>\n</body>\n</html>\n|;
	}
}


# Sub Error #
sub error {
	if (!$headflag) { &header }
print <<ERR;
<center>
<hr width=80%>
<B><font color=#FF0000>$_[0]</font></B>
<hr width=80%>
</center>
ERR
	&return_button if !$def_rb;
	&footer;
	exit;
}

# Sub Get Cookie #
sub get_cookie { 
	@pairs = split(/\;/,$ENV{'HTTP_COOKIE'});
	foreach $pair (@pairs) {
		my($name, $value) = split(/\=/, $pair);
		$name =~ s/ //g;
		$DUMMY{$name} = $value;
	}
	@pairs = split(/\,/,$DUMMY{$cookname});
	foreach $pair (@pairs) {
		my($name, $value) = split(/\:/, $pair);
		$COOKIE{$name} = $value;
	}
	$c_id = $COOKIE{'id'};
	$c_ps = $COOKIE{'ps'}
}

# Sub Set Cookie #
sub set_cookie {
	# クッキーは未更新削除期間有効
	($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + $def_dead*24*60*60);
	($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + $retry*60*60) if $_[0] eq 'del';
	$yearg += 1900;
	if ($secg  < 10) { $secg  = "0$secg";  }
	if ($ming  < 10) { $ming  = "0$ming";  }
	if ($hourg < 10) { $hourg = "0$hourg"; }
	if ($mdayg < 10) { $mdayg = "0$mdayg"; }
	$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
	$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
	$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
	$cook = "id\:$F{'id'}\,ps\:$F{'ps'}";
	print "Set-Cookie: $cookname=$cook; expires=$date_gmt\n";
}

# Sub Decode #
sub decode {
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
		@pairs = split(/&/, $buffer);
	} else {
		@pairs = split(/&/, $ENV{'QUERY_STRING'});
		if($#pairs >= 0 && $method eq 'POST') { &error("不正なエラーです"); }
	}

	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$name =~ tr/+/ /;
		$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

#		&jcode'convert(*name,'sjis');
#		&jcode'convert(*value,'sjis');

		$value =~ s/</&lt;/g;
		$value =~ s/>/&gt;/g;
		$value =~ s/\,/,/g;
		$value =~ s/\r\n/<br>/g;
		$value =~ s/\r/<br>/g;
		$value =~ s/\n/<br>/g;

		$F{$name} = $value;
	}
}

1;

⌨️ 快捷键说明

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