返回列表 發帖

register.pl 註冊檔說明

#!/usr/bin/perl
print "Content-type: text/html;charset=UTF-8;\n\n";
require "debug_simple_sub.pl";#載入DEBUG 開發的 簡易公用函式庫
require "registertemplet.pl";#載入註冊用樣版


($parm1,$parm2,$parm3)=GetParmFormValue();#取得傳遞參數
$RegisterFileDBM=$UserDataFileDBM;# 取得 註冊 資料庫 檔名



if ($parm1 eq "registerstart") {RegisterStart();}#取得參數 registerstart 的話 就 呼叫 RegisterStart() 開始註冊
if ($parm1 eq "registercheck") {RegisterCheck();}#取得參數 registercheck 的話 就 呼叫 RegisterCheck() 檢查註冊過程是否有問題
if ($parm1 eq "registerwrite") {RegisterDataWrite();}#取得參數 registerwrite 的話 就 呼叫 RegisterDataWrite() 將註冊資料寫入資料庫

#開始註冊
sub RegisterStart
{
my ($Mode)=@_; #取得傳入的參數
$RegisterNumber=ProcessDBM("amount",$RegisterFileDBM); #取的以登錄人數
if ($RegisterNumber >= $MaxRegister) {OutputMessage("q","超過了登錄人數的限額");} #若超出人數就脫離
UserRegister();#呼叫註冊用樣版
}

#檢查註冊過程是否有問題
sub RegisterCheck {
        %P=ProcessDBM("getdata",$RegisterFileDBM);#取出資料檔
        if($P{"$FORM{'UserName'}"}){OutputMessage("q",'這個用戶名已經給人使用,請選擇其它用戶名'); }#如果有相同 ID 則 脫離
        if (!$FORM{'UserName'} && !$FORM{'msname'} && !$FORM{'Password'}) { OutputMessage('q','有選項未填'); } #如果資料未填 則 脫離
        if (length($FORM{'UserName'}) > $MaxIDLength or length($FORM{'msname'}) > $MaxNameInGame){OutputMessage('q',"ID帳號($MaxIDLength字元)或者遊戲中名稱($MaxNameInGame字元)超過規定長度");} #如果資料欄長度過長 則 脫離
       
ChooseAddValues(); #針對某些屬性 加 數值
ConfirmWindow(); #彈出確認視窗

}




#將註冊資料寫入資料庫
sub RegisterDataWrite
{

if(ProcessDBM("checkname",$RegisterFileDBM,$FORM{'UserName'})){print "$FORM{'UserName'} ID 已存在";exit;}; #檢查 ID 已是否存在

ChooseAddValues();

@DisableLetters=('[','&','!','=',',','<','>',']'," ","∥"); #設定被禁用的字元


if ($FORM{'UserName'} !~ /^[a-zA-Z0-9.]+$/)  #限制ID 只能用數字或英文字母
{
print "ID 只能用數字或英文字母";
exit;
}
if (length($FORM{'UserName'}) > $MaxIDLength or length($FORM{'msname'}) > $MaxNameInGame){OutputMessage('q',"ID帳號($MaxIDLength字元)或者遊戲中名稱($MaxNameInGame字元)超過規定長度");} #檢查資料內容長度

$IsBadLetters=0;
foreach $GetEachLetter(@DisableLetters)  #將所有表單內字元一個一個檢查看是否有被禁用的字元
{
if (rindex($FORM{'UserName'},$GetEachLetter) ne -1) {$IsBadLetters=1;}
if (rindex($FORM{'Password'},$GetEachLetter) ne -1) {$IsBadLetters=1;}
if (rindex($FORM{'Email'},$GetEachLetter) ne -1) {$IsBadLetters=1;}
if (rindex($FORM{'type'},$GetEachLetter) ne -1) {$IsBadLetters=1;}
if (rindex($FORM{'msname'},$GetEachLetter) ne -1) {$IsBadLetters=1;}
if (rindex($FORM{'FaceImgSelect'},$GetEachLetter) ne -1) {$IsBadLetters=1;}
}
if ($IsBadLetters eq 1) {print '不可使用非法字元!';exit;}#若發現非法字元就脫離
if (length($FORM{'UserName'}) > $MaxIDLength) {print "ID帳號太長! 應小於 $MaxIDLength 個字元";exit;}
CheckHashIllegalKeyChars(%FORM); #檢查任何輸入的表單資料欄是否有空白

print '處理中...';



#以下為當次註冊ID資料庫中要設定的資料
@Buffer[0]=$FORM{'UserName'};
@Buffer[1]=crypt "$FORM{'Password'}",$PasswordKey;
@Buffer[2]="∥_∥∥_∥∥_∥∥_∥∥_∥∥_∥$FORM{'Email'}∥_∥∥_∥$PointCertifyNumber∥_∥1";
@Buffer[3]=$NoEmailPlayPoint;
@Buffer[5]="$FORM{'UserName'}∥_∥$Ipaddress∥_∥".(time);
@Buffer[7]=$FORM{'UserName'};
@Buffer[8]=$FORM{'Planet'};
@Buffer[11]=$FORM{'type'};
@Buffer[12]=$FORM{'Sex'};
@Buffer[13]=$FORM{'Age'};
@Buffer[14]=$FORM{'Racial'};
@Buffer[15]=0;#等級
@Buffer[16]=0;#經驗值
@Buffer[17]=50;#金錢
@Buffer[18]=0;
@Buffer[19]=0;
@Buffer[20]=0;
@Buffer[21]=0;
@Buffer[22]=0;
@Buffer[23]=$FORM{'Job'};
@Buffer[24]=0;
@Buffer[25]=$Attraction;
@Buffer[26]=0;
@Buffer[27]=0;
@Buffer[28]=$FORM{'chara'};
@Buffer[29]=$FORM{'msname'};
@Buffer[30]=0;
@Buffer[31]=0;
@Buffer[32]=0;
@Buffer[33]=0;
@Buffer[34]=0;
@Buffer[35]="$CurrentHP∥_∥$AmountHP∥_∥$CurrentEN∥_∥$AmountEN∥_∥$CurrentMP∥_∥$AmountMP";
@Buffer[36]="$OrginalPower∥_∥$AttackPower∥_∥$ProtectPower∥_∥$SpeedPower∥_∥$HitPower∥_∥$MindPower∥_∥$LearnPower∥_∥$RallyPower∥_∥$LuckPower";

$WeaponSN=(time).",$FORM{'UserName'}";

@Buffer[39]="$BasicWeapon";#武器裝備欄1
@Buffer[40]="";#武器裝備欄2
@Buffer[41]="";#武器裝備欄3
@Buffer[42]="";#武器裝備欄4
@Buffer[43]="";#武器裝備欄5
@Buffer[44]="";#武器裝備欄6
@Buffer[45]="";#武器裝備欄7
@Buffer[46]="";#武器裝備欄8

@Buffer[55]="$FORM{'FaceImgSelect'}";
@Buffer[52]=0;
@Buffer[62]=$CountryX+1;
@Buffer[63]=$CountryY+1;
@Buffer[64]=@Buffer[8];
@Buffer[84]=50;
@Buffer[88]=(time);#最後戰鬥時間
@Buffer[89]=(time);#最後被攻戰鬥時間
@Buffer[91]=$BasicSkillType;
@Buffer[92]=$BasicSkill;
@Buffer[98]=5;
@Buffer[99]=0;
@Buffer[100]=0;

ProcessDBM("add",$RegisterFileDBM,$FORM{'UserName'},@Buffer); #將資料附加到ID總資料庫

print "$FORM{'UserName'} OK.<A href=\"$MAIN_SCRIPT?HOME\">到主畫面</A>";


}




#密碼編碼
sub MakeCrypt
{
my ($Password)=@_;
print crypt $Password,$PasswordKey;
}

#針對某些屬性 加 數值
sub ChooseAddValues
{
$HPAdd=5;$ENAdd=5;$MPAdd=2;
$OrgiPowAdd=2;$AttPowAdd=2;$ProPowAdd=3;$SpdPowAdd=2;$HitPowAdd=3;$MindPow=2;
$LearnPowAdd=10;$RallyPowAdd=3;$LuckPowAdd=3;



$CurrentHP=30+$HPAdd;
$AmountHP=30+$HPAdd;
$CurrentEN=10+$ENAdd;
$AmountEN=10+$ENAdd;
$CurrentMP=0+$MPAdd;
$AmountMP=0+$MPAdd;

$OrginalPower=5+$OrgiPowAdd;
$AttackPower=5+$AttPowAdd;
$ProtectPower=5+$ProPowAdd;
$SpeedPower=5+$SpdPowAdd;
$HitPower=5+$HitPowAdd;
$MindPower=5+$MindPow;
$LearnPower=5+$LearnPowAdd;
$RallyPower=5+$RallyPowAdd;
$LuckPower=5+$LuckPowAdd;

$Attraction=0+$AttractionAdd;
}

#檢查已存在ID資訊
sub CheckExistValue
{
($EmailAddress,$NameInGame)=@_;
my %P=ProcessDBM("getdata",$RegisterFileDBM);
while (my($Key,$Value) =each %P)
{
my @SelfValue=split (/\s/,$P{"$Key"});
my @PersonalAdditionalInfo=split(/∥_∥/,@SelfValue[2]);


if (($EmailAddress eq @PersonalAdditionalInfo[6]) && ($EmailAddress ne ""))
{
print "此Email 已經被使用! ";
exit;
}       

if ($NameInGame eq @SelfValue[29])
{
print "此遊戲中稱呼已經被使用! ";
exit;
}       

if ($NameInGame eq "")
{
print "遊戲中稱呼必需輸入! ";
exit;
}       

#print "($NameInGame = @SelfValue[29])";


}       
}       


1;

返回列表