📄 introscn.pas
字号:
PasswordChar := '*';
Visible := FALSE;
OnKeyPress := EdNewIdKeyPress;
OnEnter := EdNewOnEnter;
Tag := 12;
end;
end;
destructor TLoginScene.Destroy;
begin
inherited Destroy;
end;
procedure TLoginScene.OpenScene;
var
i: integer;
d: TDirectDrawSurface;
begin
m_nCurFrame := 0;
m_nMaxFrame := 19;
m_sLoginId := '';
m_sLoginPasswd := '';
with m_EdId do begin
Left := SCREENWIDTH div 2 - 72;
Top := SCREENHEIGHT div 2 - 41;
Height := 16;
Width := 137;
Visible := FALSE;
end;
with m_EdPasswd do begin
Left := SCREENWIDTH div 2 - 72;
Top := SCREENHEIGHT div 2 - 10;
Height := 16;
Width := 137;
Visible := FALSE;
end;
m_boOpenFirst := TRUE;
FrmDlg.DLogin.Visible := TRUE;
FrmDlg.DInputKey.Visible := TRUE;
FrmDlg.DNewAccount.Visible := FALSE;
m_boNowOpening := FALSE;
PlayBGM (bmg_intro);
end;
procedure TLoginScene.CloseScene;
begin
m_EdId.Visible := FALSE;
m_EdPasswd.Visible := FALSE;
FrmDlg.DInputKey.Visible := FALSE;
FrmDlg.DLogin.Visible := FALSE;
SilenceSound;
end;
procedure TLoginScene.EdLoginIdKeyPress (Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
Key := #0;
m_sLoginId := LowerCase(m_EdId.Text);
if m_sLoginId <> '' then begin
m_EdPasswd.SetFocus;
end;
end;
end;
procedure TLoginScene.EdLoginPasswdKeyPress (Sender: TObject; var Key: Char);
begin
if (Key = '~') or (Key = '''') then Key := '_';
if Key = #13 then begin
Key := #0;
m_sLoginId := LowerCase(m_EdId.Text);
m_sLoginPasswd := m_EdPasswd.Text;
if (m_sLoginId <> '') and (m_sLoginPasswd <> '') then begin
FrmMain.SendLogin (m_sLoginId, m_sLoginPasswd);
m_EdId.Text := '';
m_EdPasswd.Text := '';
m_EdId.Visible := FALSE;
m_EdPasswd.Visible := FALSE;
end else
if (m_EdId.Visible) and (m_EdId.Text = '') then m_EdId.SetFocus;
end;
end;
procedure TLoginScene.PassWdFail;
begin
m_EdId.Visible := TRUE;
m_EdPasswd.Visible := TRUE;
m_EdId.SetFocus;
end;
function TLoginScene.NewIdCheckNewId: Boolean;
begin
Result := TRUE;
m_EdNewId.Text := Trim(m_EdNewId.Text);
if Length(m_EdNewId.Text) < 3 then begin
FrmDlg.DMessageDlg ('登录帐号的长度必须大于3位.', [mbOk]);
Beep;
m_EdNewId.SetFocus;
Result := FALSE;
end;
end;
function TLoginScene.NewIdCheckSSno: Boolean;
var
str, t1, t2, t3, syear, smon, sday: string;
ayear, amon, aday, sex: integer;
flag: Boolean;
begin
Result := TRUE;
str := m_EdSSNo.Text;
str := GetValidStr3 (str, t1, ['-']);
GetValidStr3 (str, t2, ['-']);
flag := TRUE;
if (Length(t1) = 6) and (Length(t2) = 7) then begin
smon := Copy(t1, 3, 2);
sday := Copy(t1, 5, 2);
amon := Str_ToInt (smon, 0);
aday := Str_ToInt (sday, 0);
if (amon <= 0) or (amon > 12) then flag := FALSE;
if (aday <= 0) or (aday > 31) then flag := FALSE;
sex := Str_ToInt (Copy(t2, 1, 1), 0);
if (sex <= 0) or (sex > 2) then flag := FALSE;
end else flag := FALSE;
if not flag then begin
Beep;
m_EdSSNo.SetFocus;
Result := FALSE;
end;
end;
function TLoginScene.NewIdCheckBirthDay: Boolean;
var
str, t1, t2, t3, syear, smon, sday: string;
ayear, amon, aday, sex: integer;
flag: Boolean;
begin
Result := TRUE;
flag := TRUE;
str := m_EdBirthDay.Text;
str := GetValidStr3 (str, syear, ['/']);
str := GetValidStr3 (str, smon, ['/']);
str := GetValidStr3 (str, sday, ['/']);
ayear := Str_ToInt(syear, 0);
amon := Str_ToInt(smon, 0);
aday := Str_ToInt(sday, 0);
if (ayear <= 1890) or (ayear > 2101) then flag := FALSE;
if (amon <= 0) or (amon > 12) then flag := FALSE;
if (aday <= 0) or (aday > 31) then flag := FALSE;
if not flag then begin
Beep;
m_EdBirthDay.SetFocus;
Result := FALSE;
end;
end;
procedure TLoginScene.EdNewIdKeyPress (Sender: TObject; var Key: Char);
var
str, t1, t2, t3, syear, smon, sday: string;
ayear, amon, aday, sex: integer;
flag: Boolean;
begin
if (Sender = m_EdNewPasswd) or (Sender = m_EdChgNewPw) or (Sender = m_EdChgRepeat) then
if (Key = '~') or (Key = '''') or (Key = ' ') then Key := #0;
if Key = #13 then begin
Key := #0;
if Sender = m_EdNewId then begin
if not NewIdCheckNewId then
exit;
end;
if Sender = m_EdNewPasswd then begin
if Length(m_EdNewPasswd.Text) < 4 then begin
FrmDlg.DMessageDlg ('密码长度必须大于 4位.', [mbOk]);
Beep;
m_EdNewPasswd.SetFocus;
exit;
end;
end;
if Sender = m_EdConfirm then begin
if m_EdNewPasswd.Text <> m_EdConfirm.Text then begin
FrmDlg.DMessageDlg ('二次输入的密码不一至!!!', [mbOk]);
Beep;
m_EdConfirm.SetFocus;
exit;
end;
end;
if (Sender = m_EdYourName) or (Sender = m_EdQuiz1) or (Sender = m_EdAnswer1) or
(Sender = m_EdQuiz2) or (Sender = m_EdAnswer2) or (Sender = m_EdPhone) or
(Sender = m_EdMobPhone) or (Sender = m_EdEMail)
then begin
TEdit(Sender).Text := Trim(TEdit(Sender).Text);
if TEdit(Sender).Text = '' then begin
Beep;
TEdit(Sender).SetFocus;
exit;
end;
end;
if (Sender = m_EdSSNo) and (not EnglishVersion) then begin
if not NewIdCheckSSno then
exit;
end;
if Sender = m_EdBirthDay then begin
if not NewIdCheckBirthDay then
exit;
end;
if TEdit(Sender).Text <> '' then begin
if Sender = m_EdNewId then m_EdNewPasswd.SetFocus;
if Sender = m_EdNewPasswd then m_EdConfirm.SetFocus;
if Sender = m_EdConfirm then m_EdYourName.SetFocus;
if Sender = m_EdYourName then m_EdSSNo.SetFocus;
if Sender = m_EdSSNo then m_EdBirthDay.SetFocus;
if Sender = m_EdBirthDay then m_EdQuiz1.SetFocus;
if Sender = m_EdQuiz1 then m_EdAnswer1.SetFocus;
if Sender = m_EdAnswer1 then m_EdQuiz2.SetFocus;
if Sender = m_EdQuiz2 then m_EdAnswer2.SetFocus;
if Sender = m_EdAnswer2 then m_EdPhone.SetFocus;
if Sender = m_EdPhone then m_EdMobPhone.SetFocus;
if Sender = m_EdMobPhone then m_EdEMail.SetFocus;
if Sender = m_EdEMail then begin
if m_EdNewId.Enabled then m_EdNewId.SetFocus
else if m_EdNewPasswd.Enabled then m_EdNewPasswd.SetFocus;
end;
if Sender = m_EdChgId then m_EdChgCurrentpw.SetFocus;
if Sender = m_EdChgCurrentpw then m_EdChgNewPw.SetFocus;
if Sender = m_EdChgNewPw then m_EdChgRepeat.SetFocus;
if Sender = m_EdChgRepeat then m_EdChgId.SetFocus;
end;
end;
end;
procedure TLoginScene.EdNewOnEnter (Sender: TObject);
var
hx, hy: integer;
begin
FrmDlg.NAHelps.Clear;
hx := TEdit(Sender).Left + TEdit(Sender).Width + 10;
hy := TEdit(Sender).Top + TEdit(Sender).Height - 18;
if Sender = m_EdNewId then begin
FrmDlg.NAHelps.Add ('您的帐号名称可以包括:');
FrmDlg.NAHelps.Add ('字符、数字的组合。');
FrmDlg.NAHelps.Add ('帐号名称长度必须为4或以上。');
FrmDlg.NAHelps.Add ('登陆帐号并游戏中的人物名称。');
FrmDlg.NAHelps.Add ('请仔细输入创建帐号所需信息。');
FrmDlg.NAHelps.Add ('您的登陆帐号可以登陆游戏');
FrmDlg.NAHelps.Add ('及我们网站,以取得一些相关信息。');
FrmDlg.NAHelps.Add ('');
FrmDlg.NAHelps.Add ('建议您的登陆帐号不要与游戏中的角');
FrmDlg.NAHelps.Add ('色名相同,');
FrmDlg.NAHelps.Add ('以确保你的密码不会被爆力破解。');
end;
if Sender = m_EdNewPasswd then begin
FrmDlg.NAHelps.Add ('您的密码可以是字符及数字的组合,');
FrmDlg.NAHelps.Add ('但密码长度必须至少4位。');
FrmDlg.NAHelps.Add ('建议您的密码内容不要过于简单,');
FrmDlg.NAHelps.Add ('以防被人猜到。');
FrmDlg.NAHelps.Add ('请记住您输入的密码,如果丢失密码');
FrmDlg.NAHelps.Add ('将无法登录游戏。');
FrmDlg.NAHelps.Add ('');
FrmDlg.NAHelps.Add ('');
FrmDlg.NAHelps.Add ('');
FrmDlg.NAHelps.Add ('');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdConfirm then begin
FrmDlg.NAHelps.Add ('再次输入密码');
FrmDlg.NAHelps.Add ('以确认。');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdYourName then begin
FrmDlg.NAHelps.Add ('请输入您的全名.');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdSSNo then begin
FrmDlg.NAHelps.Add ('请输入你的身份证号');
FrmDlg.NAHelps.Add ('例如: 720101-146720');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdBirthDay then begin
FrmDlg.NAHelps.Add ('请输入您的出生年月');
FrmDlg.NAHelps.Add ('例如:1985/08/13');
FrmDlg.NAHelps.Add ('');
end;
if (Sender = m_EdQuiz1) or (Sender = m_EdQuiz2) then begin
FrmDlg.NAHelps.Add ('请输入一个密码提示问题');
FrmDlg.NAHelps.Add ('这个提示将用于密码丢失后找');
FrmDlg.NAHelps.Add ('回密码用。');
FrmDlg.NAHelps.Add ('');
end;
if (Sender = m_EdAnswer1) or (Sender = m_EdAnswer2) then begin
FrmDlg.NAHelps.Add ('请输入上面问题的');
FrmDlg.NAHelps.Add ('答案。');
FrmDlg.NAHelps.Add ('');
end;
if (Sender=m_EdYourName) or (Sender=m_EdSSNo) or (Sender=m_EdQuiz1) or (Sender=m_EdQuiz2) or (Sender=m_EdAnswer1) or (Sender=m_EdAnswer2) then begin
FrmDlg.NAHelps.Add ('您输入的信息必须真实正确的信息');
FrmDlg.NAHelps.Add ('如果使用了虚假的注册信息');
FrmDlg.NAHelps.Add ('您的帐号将被取消。');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdPhone then begin
FrmDlg.NAHelps.Add ('请输入您的电话号码。');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdMobPhone then begin
FrmDlg.NAHelps.Add ('请输入您的手机号码。');
FrmDlg.NAHelps.Add ('');
end;
if Sender = m_EdEMail then begin
FrmDlg.NAHelps.Add ('请输入你的电子邮件帐号。');
FrmDlg.NAHelps.Add ('你的电子邮件将会用来存取');
FrmDlg.NAHelps.Add ('一些我们的服务。你能得到');
FrmDlg.NAHelps.Add ('最新的更新资料。');
FrmDlg.NAHelps.Add ('');
end;
end;
procedure TLoginScene.HideLoginBox;
begin
//EdId.Visible := FALSE;
//EdPasswd.Visible := FALSE;
//FrmDlg.DLogin.Visible := FALSE;
ChangeLoginState (lsCloseAll);
end;
procedure TLoginScene.OpenLoginDoor;
begin
m_boNowOpening := TRUE;
m_dwStartTime := GetTickCount;
HideLoginBox;
PlaySound (s_rock_door_open);
end;
procedure TLoginScene.PlayScene (MSurface: TDirectDrawSurface);
var
d: TDirectDrawSurface;
begin
if m_boOpenFirst then begin
m_boOpenFirst := FALSE;
m_EdId.Visible := TRUE;
m_EdPasswd.Visible := TRUE;
m_EdId.SetFocus;
end;
{$IF CUSTOMLIBFILE = 1}
d := g_WMainImages.Images[83];
{$ELSE}
d := g_WChrSelImages.Images[0];
{$IFEND}
if d <> nil then begin
MSurface.Draw ((SCREENWIDTH - 800) div 2, (SCREENHEIGHT - 600) div 2, d.ClientRect, d, FALSE);
end;
if m_boNowOpening then begin
//开门速度
if GetTickCount - m_dwStartTime > 50 then begin
m_dwStartTime := GetTickCount;
Inc (m_nCurFrame);
end;
if m_nCurFrame >= m_nMaxFrame-1 then begin
m_nCurFrame := m_nMaxFrame-1;
if not g_boDoFadeOut and not g_boDoFadeIn then begin
g_boDoFadeOut := TRUE;
g_boDoFadeIn := TRUE;
g_nFadeIndex := 29;
end;
end;
{$IF CUSTOMLIBFILE = 1}
d := g_WMainImages.Images[m_nCurFrame+84];
{$ELSE}
d := g_WChrSelImages.Images[m_nCurFrame];
{$IFEND}
if d <> nil then
MSurface.Draw (0, 0, d.ClientRect, d, TRUE);
if g_boDoFadeOut then begin
if g_nFadeIndex <= 1 then begin
g_WMainImages.ClearCache;
g_WChrSelImages.ClearCache;
DScreen.ChangeScene (stSelectChr);
end;
end;
end;
end;
procedure TLoginScene.ChangeLoginState (state: TLoginState);
var
i, focus: integer;
c: TControl;
begin
focus := -1;
case state of
lsLogin: focus := 10;
lsNewIdRetry, lsNewId: focus := 11;
lsChgpw: focus := 12;
lsCloseAll: focus := -1;
end;
with FrmMain do begin
for i:=0 to ControlCount-1 do begin
c := Controls[i];
if c is TEdit then begin
if c.Tag in [10..12] then begin
if c.Tag = focus then begin
c.Visible := TRUE;
TEdit(c).Text := '';
end else begin
c.Visible := FALSE;
TEdit(c).Text := '';
end;
end;
end;
end;
if EnglishVersion then //检测是否为英文版本.
m_EdSSNo.Visible := FALSE;
case state of
lsLogin:
begin
FrmDlg.DNewAccount.Visible := FALSE;
FrmDlg.DChgPw.Visible := FALSE;
FrmDlg.DLogin.Visible := TRUE;
FrmDlg.DInputKey.Visible := TRUE;
if m_EdId.Visible then m_EdId.SetFocus;
end;
lsNewIdRetry,
lsNewId:
begin
if m_boUpdateAccountMode then
m_EdNewId.Enabled := FALSE
else
m_EdNewId.Enabled := TRUE;
FrmDlg.DNewAccount.Visible := TRUE;
FrmDlg.DChgPw.Visible := FALSE;
FrmDlg.DLogin.Visible := FALSE;
FrmDlg.DInputKey.Visible := FALSE;
if m_EdNewId.Visible and m_EdNewId.Enabled then begin
m_EdNewId.SetFocus;
end else begin
if m_EdConfirm.Visible and m_EdConfirm.Enabled then
m_EdConfirm.SetFocus;
end;
end;
lsChgpw:
begin
FrmDlg.DNewAccount.Visible := FALSE;
FrmDlg.DChgPw.Visible := TRUE;
FrmDlg.DLogin.Visible := FALSE;
FrmDlg.DInputKey.Visible := FALSE;
if m_EdChgId.Visible then m_EdChgId.SetFocus;
end;
lsCloseAll:
begin
FrmDlg.DNewAccount.Visible := FALSE;
FrmDlg.DChgPw.Visible := FALSE;
FrmDlg.DLogin.Visible := FALSE;
FrmDlg.DInputKey.Visible := FALSE;
end;
end;
end;
end;
procedure TLoginScene.NewClick;
begin
m_boUpdateAccountMode := FALSE;
FrmDlg.NewAccountTitle := '';
ChangeLoginState (lsNewId);
end;
procedure TLoginScene.NewIdRetry (boupdate: Boolean);
begin
m_boUpdateAccountMode := boupdate;
ChangeLoginState (lsNewidRetry);
m_EdNewId.Text := m_NewIdRetryUE.sAccount;
m_EdNewPasswd.Text := m_NewIdRetryUE.sPassword;
m_EdYourName.Text := m_NewIdRetryUE.sUserName;
m_EdSSNo.Text := m_NewIdRetryUE.sSSNo;
m_EdQuiz1.Text := m_NewIdRetryUE.sQuiz;
m_EdAnswer1.Text := m_NewIdRetryUE.sAnswer;
m_EdPhone.Text := m_NewIdRetryUE.sPhone;
m_EdEMail.Text := m_NewIdRetryUE.sEMail;
m_EdQuiz2.Text := m_NewIdRetryAdd.sQuiz2;
m_EdAnswer2.Text := m_NewIdRetryAdd.sAnswer2;
m_EdMobPhone.Text := m_NewIdRetryAdd.sMobilePhone;
m_EdBirthDay.Text := m_NewIdRetryAdd.sBirthDay;
end;
procedure TLoginScene.UpdateAccountInfos (ue: TUserEntry);
begin
m_NewIdRetryUE := ue;
FillChar (m_NewIdRetryAdd, sizeof(TUserEntryAdd), #0);
m_boUpdateAccountMode := TRUE;
NewIdRetry (TRUE);
FrmDlg.NewAccountTitle := '(请完成帐户的所有必需资料的填写)';
end;
procedure TLoginScene.OkClick;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -