📄 message.cpp
字号:
#include "GameH.h"
void RunMessage(MessageCmd ID,int FT,char *TName,int TW,int TH,int x,int y,char *Other,int Otheri)
{
char *tmp=NULL;
int tx=0,ty=0,ox=0,oy=0;
switch (ID)
{
case MS_Debug: //调试
if (FT==0) IsDebug=false;
else IsDebug=true;
break;
case MS_NWMAP: //建地图
//map.NewMap(TName,FT,TW,TH,Otheri,Other); //创建
map.NewMap(TName,FT,TW,TH,Other); //创建
role.AMoveTo(false,x,y,false); //确定开始坐标
engine.m_GameState=GAME_LOADMAP; //设定状态机
break;
case MS_SETRPOS: //瞬间移动
role.AMoveTo(false,x,y,false); //确定开始坐标
break;
case MS_RMOVETO: //瞬间移动
role.AMoveTo(false,x,y,true); //确定开始坐标
break;
case MS_Close: //关闭引擎
PostQuitMessage(0);
break;
case MS_RAT: //读砖块
tile.ReadATile(FT,TName);
break;
case MS_NWROLE:
stRoleC trole;
trole.face=FT;
trole.Name=TName;
trole.Exp=INIT_EXP;
trole.MaxExp=INIT_EXPTO;
trole.IsNPC=false; //是角色
trole.HP=INIT_HP;
trole.MP=INIT_MP;
trole.Level=INIT_LEVEL;
trole.MaxHP=INIT_HP;
trole.MaxMP=INIT_MP;
trole.roler.top=TH;
trole.roler.left=TW;
trole.roler.right=x;
trole.roler.bottom=y;
trole.facePic=Other;
role.AddActor(trole);
break;
case MS_DLROLE:
role.DeleteActor(FT);
break;
case MS_SAY:
strcpy(tmpc1,Other);
KeyClear(VK_RETURN);KeyClear(VK_SPACE);KeyClear(VK_LBUTTON); //先清除
BltFast(lpDDS[7],0,0,lpDDS[1],NULL,NoKey); //备份
for(;;)
{
if (RunGame==true)
{
Clrscr(lpDDS[1],0);
XGameLoop(lpDDS[1]);
Say(lpDDS[1],TName,tmpc1,TW,TH);
}
else
{
BltFast(lpDDS[1],0,0,lpDDS[7],NULL,NoKey); //备份
Say(lpDDS[1],TName,tmpc1,TW,TH);
}
ForV(); //Fps等文字状态
PrintMouse(lpDDS[1],lpDDS[DDS_Mouse]); //画鼠标 必须
FlipSurface();
if (KEYSTATE(VK_RETURN)==true) {KeyClear(VK_RETURN);IsNextLine=true; break;}
if (KEYSTATE(VK_LBUTTON)==true) {KeyClear(VK_LBUTTON);IsNextLine=true; break;}
if (KEYSTATE(VK_SPACE)==true) {KeyClear(VK_SPACE);IsNextLine=true; break;}
}
KeyClear(VK_RETURN);KeyClear(VK_SPACE); //再清除
break;
case MS_LOADMAP:
strcpy(tmpc,MapPath);
strcat(tmpc,TName);
strcpy(tmpc1,tmpc);
strcpy(tmpc1," Map Read Failed!");
_ERROR(map.LoadMap(tmpc),tmpc1);
engine.m_GameState=GAME_LOADMAP; //设定状态机
break;
/*
case MS_LOADNPC:
strcpy(tmpc,NPCSPath);
strcat(tmpc,TName);
strcpy(tmpc1,tmpc);
strcpy(tmpc1," NPC Load Failed!");
_ERROR(map.LoadNPC(tmpc),tmpc1);
break;*/
case MS_SAVEMAP:
strcpy(tmpc,MapPath);
strcat(tmpc,TName);
strcpy(tmpc1,tmpc);
strcpy(tmpc1," Map Write Failed!");
_ERROR(map.SaveMap(tmpc),tmpc1);
break;
case MS_SWPIC: //读取图片并完整显示在屏幕上
strcpy(tmpc,PicPath);
strcat(tmpc,TName);
cscript.BScriptBg(tmpc);
break;
case MS_PLAYMUSIC:
strcpy(tmpc,SoundPath);
strcat(tmpc,TName);
sound.Play(tmpc);
break;
case MS_STOPMUSIC:
sound.Stop();
break;
case MS_PLAYSOUND:
strcpy(tmpc,SoundPath);
strcat(tmpc,TName);
sound.PlayO(tmpc,IntTobool(FT));
//sound.PlayO(tmpc,true);
break;
case MS_PLAYVIDEO:
sound.Stop(); //防止冲突
strcpy(tmpc,VideoPath);
strcat(tmpc,TName);
video.Play(tmpc,hwnd);
break;
case MS_PLAYVIDEOALONG:
sound.Stop(); //防止冲突
strcpy(tmpc,VideoPath);
strcat(tmpc,TName);
video.StrPlay(tmpc,hwnd);
break;
case MS_STOPVIDEO:
video.Stop();
break;
case MS_MOUSEDOWN:
if (role.GetActorNum()>0)
{
GetCursorPos(&curpos);
MIToMD(abs(curpos.x),abs(curpos.y),tx,ty);
char *Tmpc=role.GetRoleScriptName(map.GetStartXY().x+tx,map.GetStartXY().y+ty);
if (Tmpc==NULL)
role.AMoveTo(true,tx,ty,true); //移动
else
{
ZeroMemory(tmpc,MAX_PATH);
sprintf(tmpc,"%s%s",ScriptPath,Tmpc);
cscript.LoadScript(tmpc);
}
}
break;
case MS_KEYDOWN:
//0. 下 1. 上 2.左 3.右
if (role.GetActorNum()>0)
{
POINT np=role.ActorXy(0);
if (FT==LeftFace) role.AMoveTo(false,np.x-1,np.y,false);
if (FT==RightFace) role.AMoveTo(false,np.x+1,np.y,false);
if (FT==DownFace) role.AMoveTo(false,np.x,np.y+1,false);
if (FT==UpFace) role.AMoveTo(false,np.x,np.y-1,false);
}
break;
case MS_SETNCK:
DDSetColorKey(lpDDS[1],RGB(TW,TH,x));
break;
case MS_ISSM:
if (FT==0) IsMouse=false;
else IsMouse=true;
break;
case MS_CMMO:
map.CreateAPic(FT,TW,TH,x,y,Otheri); //类型 X Y ID, TileX,TileY
break;
case MS_SMBK:
map.CBlockOn(IntTobool(FT),TW,TH); //开启/关闭 X Y
break;
case MS_SMHK:
map.CHookOn(IntTobool(FT),TName,TW,TH);//开启/关闭 陷阱脚本 X Y
break;
case MS_LDROLE:
if (role.AddActor(TName)!=true) _ERROR_OK("游戏脚本错误!");
break;
case MS_OPENHOOK:
ZeroMemory(tmpc,MAX_PATH); //清0
sprintf("%s%s",ScriptPath,map.Cell[TW][TH].HookScriptName);
cscript.LoadScript(tmpc);
break;
case MS_ISHOOK:
if (map.IsHook(TW,TH)==true)
{
ZeroMemory(tmpc,MAX_PATH); //清0
sprintf(tmpc,"%s%s",ScriptPath,map.Cell[TW][TH].HookScriptName);
cscript.LoadScript(tmpc);
}
break;
case MS_RUNSCRIPT:
//运行一个脚本
sprintf(tmpc,"%s%s",ScriptPath,TName); //格式化函数
if (cscript.LoadScript(tmpc)!=true)
{
char Tempc[MAX_LOADSTRING];
sprintf(Tempc,"Script Read ERROR!\nError:%s",tmpc);
_ERROR_OK(Tempc);
}
break;
case MS_SMN:
int ID=role.NPCNameToID(TName);
role.NAMove(false,IntTobool(FT),ID,TW,TH);
break;
}
}
void RunMessage(MessageCmd ID,int FT,char *TName,char *TName1,char *TName2,char *TName3,int L,int T,int x,int y,int Width,int Height,int Otheri)
{
switch (ID)
{
case MS_NWNPC:
stRoleC tr;
tr.face=FT;
tr.Name=TName;
tr.facePic=TName1;
tr.EScrFName=TName2;
tr.VS=IntTobool(Otheri);
tr.IsNPC=true; //是NPC
tr.x=x;
tr.y=y;
tr.roler.bottom=Height;
tr.roler.right=Width;
tr.roler.top=T;
tr.roler.left=L;
role.AddNPC(tr);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -