📄 clmain.pas
字号:
end else begin
FrmDlg.DOptionClick;
end;
end;
{
Ctrl + H 选择自己喜欢的攻击模式
和平攻击模式:除了对暴民以外其他攻击都无效。
行会联盟攻击模式:对自己行会内的其他玩家攻击无效
编组攻击模式:处于同一小组的玩家攻击无效
全体攻击模式:对所有的玩家和暴民都具有攻击效果。
善恶攻击模式:PK红名专用攻击模式。
}
word('H'): begin
if ssCtrl in Shift then begin
SendSay ('@AttackMode');
end;
end;
word('A'): begin
if ssCtrl in Shift then begin
SendSay ('@Rest');
end;
end;
word('D'): begin
if ssCtrl in Shift then begin
SendPassword('',0);
{
SetInputStatus();
if m_boPasswordIntputStatus then
DScreen.AddChatBoardString ('请输入密码:', clBlue, clWhite);
}
end;
end;
{
word('D'): begin
if ssCtrl in Shift then begin
FrmDlg.DChgGamePwd.Visible:=not FrmDlg.DChgGamePwd.Visible;
end;
end;
}
//Ctrl + F 改版游戏的字体,你可以选择8种不同的字体
word('F'): begin
if ssCtrl in Shift then begin
if g_nCurFont < MAXFONT-1 then Inc(g_nCurFont)
else g_nCurFont := 0;
g_sCurFontName := g_FontArr[g_nCurFont];
FrmMain.Font.Name := g_sCurFontName;
FrmMain.Canvas.Font.Name := g_sCurFontName;
DxDraw.Surface.Canvas.Font.Name := g_sCurFontName;
PlayScene.EdChat.Font.Name := g_sCurFontName;
ini := TIniFile.Create ('.\Lmir.ini');
if ini <> nil then begin
ini.WriteString ('Setup', 'FontName', g_sCurFontName);
ini.Free;
end;
end;
end;
word('Z'): begin
if ssCtrl in Shift then begin
g_boShowAllItem:=not g_boShowAllItem;
end else
if not PlayScene.EdChat.Visible then begin
if CanNextAction and ServerAcceptNextAction then begin
SendPickup; //捡物品
end;
end;
end;
//Alt + X 重新开始游戏(当角色死亡后特别有用)
word('X'):
begin
if g_MySelf = nil then exit;
if ssAlt in Shift then begin
//强行退出
g_dwLatestStruckTick:=GetTickCount() + 10001;
g_dwLatestMagicTick:=GetTickCount() + 10001;
g_dwLatestHitTick:=GetTickCount() + 10001;
//
if (GetTickCount - g_dwLatestStruckTick > 10000) and
(GetTickCount - g_dwLatestMagicTick > 10000) and
(GetTickCount - g_dwLatestHitTick > 10000) or
(g_MySelf.m_boDeath) then
begin
AppLogOut;
end else
DScreen.AddChatBoardString ('正在战斗,不能退出..', clYellow, clRed);
end;
end;
word('Q'):
begin
if g_MySelf = nil then exit;
if ssAlt in Shift then begin
//强行退出
g_dwLatestStruckTick:=GetTickCount() + 10001;
g_dwLatestMagicTick:=GetTickCount() + 10001;
g_dwLatestHitTick:=GetTickCount() + 10001;
//
if (GetTickCount - g_dwLatestStruckTick > 10000) and
(GetTickCount - g_dwLatestMagicTick > 10000) and
(GetTickCount - g_dwLatestHitTick > 10000) or
(g_MySelf.m_boDeath) then
begin
AppExit;
end else
DScreen.AddChatBoardString ('正在战斗,不能退出..', clYellow, clRed);
end;
end;
word('M'): begin
if not PlayScene.EdChat.Visible then begin
if not g_boViewMiniMap then begin
if GetTickCount > g_dwQueryMsgTick then begin
g_dwQueryMsgTick := GetTickCount + 3000;
FrmMain.SendWantMiniMap;
g_nViewMinMapLv:=1;
end;
end else begin
if g_nViewMinMapLv >= 2 then begin
g_nViewMinMapLv:=0;
g_boViewMiniMap := FALSE;
end else Inc(g_nViewMinMapLv);
end;
end;
end;
word('W'): begin
if not PlayScene.EdChat.Visible then begin
if GetTickCount > g_dwQueryMsgTick then begin
g_dwQueryMsgTick := GetTickCount + 3000;
FrmMain.SendDealTry;
end;
end;
end;
word('G'): begin
if ssCtrl in Shift then begin
if g_FocusCret <> nil then
if g_GroupMembers.Count = 0 then
SendCreateGroup(g_FocusCret.m_sUserName)
else SendAddGroupMember(g_FocusCret.m_sUserName);
PlayScene.EdChat.Text:=g_FocusCret.m_sUserName;
end else begin
if ssAlt in Shift then begin
if g_FocusCret <> nil then
SendDelGroupMember(g_FocusCret.m_sUserName)
end else begin
if not PlayScene.EdChat.Visible then begin
if FrmDlg.DGuildDlg.Visible then begin
FrmDlg.DGuildDlg.Visible := FALSE;
end else
if GetTickCount > g_dwQueryMsgTick then begin
g_dwQueryMsgTick := GetTickCount + 3000;
FrmMain.SendGuildDlg;
end;
end;
end;
end;
end;
word('S'): begin
if not PlayScene.EdChat.Visible then
FrmDlg.ToggleShowGroupDlg;
end;
word('C'): begin
if not PlayScene.EdChat.Visible then begin
FrmDlg.StatePage := 0;
FrmDlg.OpenMyStatus;
end;
end;
word('B'): begin
if not PlayScene.EdChat.Visible then
FrmDlg.OpenItemBag;
end;
word('E'): begin
if not PlayScene.EdChat.Visible then begin
FrmDlg.StatePage := 3;
FrmDlg.OpenMyStatus;
end;
end;
word('V'): begin
if not PlayScene.EdChat.Visible then
FrmDlg.OpenFriendDlg();
end;
word('N'): begin
if not PlayScene.EdChat.Visible then
FrmDlg.OpenAdjustAbility;
end;
end;
//键盘上下方向键 按上或者下键可查看过去的聊天信息
case Key of
VK_UP:
with DScreen do begin
if ChatBoardTop > 0 then Dec (ChatBoardTop);
end;
VK_DOWN:
with DScreen do begin
if ChatBoardTop < ChatStrs.Count-1 then
Inc (ChatBoardTop);
end;
VK_PRIOR:
with DScreen do begin
if ChatBoardTop > VIEWCHATLINE then
ChatBoardTop := ChatBoardTop - VIEWCHATLINE
else ChatBoardTop := 0;
end;
VK_NEXT:
with DScreen do begin
if ChatBoardTop + VIEWCHATLINE < ChatStrs.Count-1 then
ChatBoardTop := ChatBoardTop + VIEWCHATLINE
else ChatBoardTop := ChatStrs.Count-1;
if ChatBoardTop < 0 then ChatBoardTop := 0;
end;
end;
end;
procedure TfrmMain.FormKeyPress(Sender: TObject; var Key: Char);
begin
if g_DWinMan.KeyPress (Key) then exit;
if DScreen.CurrentScene = PlayScene then begin
if PlayScene.EdChat.Visible then begin
//傍烹栏肺 贸府秦具 窍绰 版快父 酒贰肺 逞绢皑
exit;
end;
case byte(key) of
byte('1')..byte('6'):
begin
EatItem (byte(key) - byte('1')); //骇飘 酒捞袍阑 荤侩茄促.
end;
27: //ESC
begin
end;
byte(' '), 13: //盲泼 冠胶
begin
PlayScene.EdChat.Visible := TRUE;
PlayScene.EdChat.SetFocus;
SetImeMode (PlayScene.EdChat.Handle, LocalLanguage);
if FrmDlg.BoGuildChat then begin
PlayScene.EdChat.Text := '!~';
PlayScene.EdChat.SelStart := Length(PlayScene.EdChat.Text);
PlayScene.EdChat.SelLength := 0;
end else begin
PlayScene.EdChat.Text := '';
end;
end;
{
特殊命令 /玩家名字 无距离限制的交流,你也可以用鼠标左键点击聊天窗口中角色的名字来使用这个功能。
!交流文字 向所有人发言(八级以上的玩家才能使用,所有公开发言的信息能够在游戏中保留10秒)
!!文字 如果你们创建了小组,你所发的信息将被组内的其他玩家看见
!~文字 这种广播功能治提供给同一行会的玩家
@拒绝私聊 拒绝所有的私人聊天的命令
@拒绝+人名 对特定的某一个人聊天文字进行屏蔽
@拒绝行会聊天 屏蔽行会聊天所有消息的命令
@退出门派 脱离行会
}
byte('@'),
byte('!'),
byte('/'):
begin
PlayScene.EdChat.Visible := TRUE;
PlayScene.EdChat.SetFocus;
SetImeMode (PlayScene.EdChat.Handle, LocalLanguage);
if key = '/' then begin
if WhisperName = '' then PlayScene.EdChat.Text := key
else if Length(WhisperName) > 2 then PlayScene.EdChat.Text := '/' + WhisperName + ' '
else PlayScene.EdChat.Text := key;
PlayScene.EdChat.SelStart := Length(PlayScene.EdChat.Text);
PlayScene.EdChat.SelLength := 0;
end else begin
PlayScene.EdChat.Text := key;
PlayScene.EdChat.SelStart := 1;
PlayScene.EdChat.SelLength := 0;
end;
end;
end;
key := #0;
end;
end;
function TfrmMain.GetMagicByKey (Key: char): PTClientMagic;
var
i: integer;
pm: PTClientMagic;
begin
Result := nil;
for i:=0 to g_MagicList.Count-1 do begin
pm := PTClientMagic (g_MagicList[i]);
if pm.Key = Key then begin
Result := pm;
break;
end;
end;
end;
procedure TfrmMain.UseMagic (tx, ty: integer; pcm: PTClientMagic); //tx, ty: 胶农赴 谅钎烙.
var
tdir, targx, targy, targid: integer;
pmag: PTUseMagicInfo;
begin
if pcm = nil then exit;
//是否可以使用魔法:需要的点数<当前点数,或者是魔法EffectType = 0
if (pcm.Def.wSpell + pcm.Def.btDefSpell <= g_MySelf.m_Abil.MP) or (pcm.Def.btEffectType = 0) then begin
if pcm.Def.btEffectType = 0 then begin //八过,瓤苞绝澜
//if CanNextAction and ServerAcceptNextAction then begin
//堪拳搬篮 茄锅 荤侩饶 9檬鳖瘤绰 促矫 喘妨瘤瘤 臼霸 茄促.
if pcm.Def.wMagicId = 26 then begin //堪拳搬
if GetTickCount - g_dwLatestFireHitTick < 10 * 1000 then begin
exit;
end;
end;
//公怕焊绰 茄锅 荤侩饶 3檬鳖瘤绰 促矫 喘妨瘤瘤 臼绰促.
if pcm.Def.wMagicId = 27 then begin //公怕焊
if GetTickCount - g_dwLatestRushRushTick < 3 * 1000 then begin
exit;
end;
end;
//八过篮 掉饭捞(500ms) 绝捞 喘妨柳促.
if GetTickCount - g_dwLatestSpellTick > g_dwSpellTime{500} then begin
g_dwLatestSpellTick := GetTickCount;
g_dwMagicDelayTime := 0; //pcm.Def.DelayTime;
SendSpellMsg (CM_SPELL, g_MySelf.m_btDir{x}, 0, pcm.Def.wMagicId, 0);
end;
end else begin
tdir := GetFlyDirection (390, 175, tx, ty);
// MagicTarget := FocusCret;
//魔法锁定
if (pcm.Def.wMagicId = 2)
or (pcm.Def.wMagicId = 14)
or (pcm.Def.wMagicId = 15)
or (pcm.Def.wMagicId = 19) then begin
g_MagicTarget:=g_FocusCret;
end else begin
if not g_boMagicLock or (PlayScene.IsValidActor (g_FocusCret) and (not g_FocusCret.m_boDeath)) then begin
g_MagicLockActor:=g_FocusCret;
end;
g_MagicTarget:=g_MagicLockActor;
end;
if not PlayScene.IsValidActor (g_MagicTarget) then
g_MagicTarget := nil;
if g_MagicTarget = nil then begin
PlayScene.CXYfromMouseXY (tx, ty, targx, targy);
targid := 0;
end else begin
targx := g_MagicTarget.m_nCurrX;
targy := g_MagicTarget.m_nCurrY;
targid := g_MagicTarget.m_nRecogId;
end;
if CanNextAction and ServerAcceptNextAction then begin
g_dwLatestSpellTick := GetTickCount; //付过 荤侩
new (pmag);
FillChar (pmag^, sizeof(TUseMagicInfo), #0);
pmag.EffectNumber := pcm.Def.btEffect;
pmag.MagicSerial := pcm.Def.wMagicId;
pmag.ServerMagicCode := 0;
g_dwMagicDelayTime := 200 + pcm.Def.dwDelayTime; //促澜 付过阑 荤侩且锭鳖瘤 浆绰 矫埃
case pmag.MagicSerial of
//0, 2, 11, 12, 15, 16, 17, 13, 23, 24, 26, 27, 28, 29: ;
2, 14, 15, 16, 17, 18, 19, 21, //厚傍拜 付过 力寇
12, 25, 26, 28, 29, 30, 31: ;
else g_dwLatestMagicTick := GetTickCount;
end;
//荤恩阑 傍拜窍绰 版快狼 掉饭捞
g_dwMagicPKDelayTime := 0;
if g_MagicTarget <> nil t
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -