📄 script.cpp
字号:
if (Update((DVector*)pData) == DFALSE)
{
g_pServerDE->RemoveObject(m_hObject);
return 0;
}
break;
case MID_PRECREATE:
{
DDWORD dwRet = B2BaseClass::EngineMessageFn(messageID, pData, fData);
if (fData == 1.0f)
ReadProp((ObjectCreateStruct*)pData);
PostPropRead((ObjectCreateStruct*)pData);
return dwRet;
}
case MID_INITIALUPDATE:
InitialUpdate((DVector*)pData);
break;
// If we created a link to the target, this will tell us that it no longer exists
case MID_LINKBROKEN:
{
HOBJECT hObj = (HOBJECT)pData;
for (int x=0; x<MAXSCRIPTOBJ; x++)
{
if (ScriptObject[x].m_hObject == hObj)
{
ScriptObject[x].m_hObject = DNULL;
break;
}
}
}
break;
}
return B2BaseClass::EngineMessageFn(messageID, pData, fData);
}
// --------------------------------------------------------------------------- //
//
// ROUTINE: Script::ObjectMessageFn()
//
// PURPOSE: Handler for server object messages.
//
// --------------------------------------------------------------------------- //
DDWORD Script::ObjectMessageFn(HOBJECT hSender, DDWORD messageID, HMESSAGEREAD hRead)
{
switch (messageID)
{
case MID_TRIGGER:
HandleTrigger(hSender, hRead);
break;
}
return B2BaseClass::ObjectMessageFn(hSender, messageID, hRead);
}
// --------------------------------------------------------------------------- //
//
// ROUTINE: Script::HandleTrigger()
//
// PURPOSE: Trigger function
//
// --------------------------------------------------------------------------- //
DBOOL Script::HandleTrigger( HOBJECT hSender, HMESSAGEREAD hRead )
{
if (!g_pServerDE) return DFALSE;
HSTRING hMsg = g_pServerDE->ReadFromMessageHString(hRead);
char *pCommand = _strupr(g_pServerDE->GetStringData(hMsg));
g_pServerDE->BPrint(pCommand);
if ( _mbsncmp((const unsigned char*)pCommand, (const unsigned char*)"SCRIPT_STOP", 11) == 0)
{
m_fStartTime = -1.0f;
m_bCheckStartTime = DTRUE;
}
// Dont Restart it...
if ( m_bScriptStarted == DTRUE ) return DFALSE;
if ( _mbsncmp((const unsigned char*)pCommand, (const unsigned char*)"SCRIPT_START", 12) == 0)
{
m_fStartTime = 1.0f;
m_bCheckStartTime = DTRUE;
}
g_pServerDE->FreeString( hMsg );
return DFALSE;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: StringToScriptCutCmdType
//
// PURPOSE: Cut Scene Script Commands and num of args
//
// ----------------------------------------------------------------------- //
int Script::StringToScriptCutCmdType(char* pCmdName, int &nArgs, int &nCheckObjID)
{
if (!pCmdName) return SCRIPT_SCMD_UNKNOWN;
int nType = SCRIPT_SCMD_UNKNOWN;
// Return the number of args required
nArgs = 0;
// Return the ObjectID Arg position, to check to make sure we are not over MAXSCRIPTOBJ
nCheckObjID = 0;
if (_mbsicmp((const unsigned char*)SCRIPTSCENE_START, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_START;
nArgs = 0;
}
if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CUTSCENE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CUTSCENE;
nArgs = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SUBTITLE_DISPLAY, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_SUBTITLE_DISPLAY;
nArgs = 2; // Length of time, Text to Display.
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SUBTITLE_FADE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_SUBTITLE_FADE;
nArgs = 1; // Delay
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_PLAY_ANIM, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_PLAY_ANIM;
nArgs = 2; // Object, Anim Num
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_PLAY_SOUNDPOS, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_PLAY_SOUND_POS;
nArgs = 7; // SoundID, X, Y, Z, Sound, Radius,Looping
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_PLAY_SOUNDOBJ, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_PLAY_SOUND_OBJ;
nArgs = 5; // SoundID, ObjectID(for Position), Sound, Radius,Looping
nCheckObjID = 2;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_KILL_SOUND, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_KILL_SOUND;
nArgs = 1; // SoundID
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_WAIT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_WAIT;
nArgs = 1; // Delay in secs
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_AT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_AT;
nArgs = 5; // Object ID, Class to create, X, Y, Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_NEAR, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_NEAR;
nArgs = 3; // Object ID, Class to create, NearObjectID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_ASSIGN, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_ASSIGN;
nArgs = 2; // Object ID, Target Name (object to assign the ID to, must be in level)
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_MODEL_AT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_MODEL_AT;
nArgs = 6; // Object ID, Model Name, Skin Name, X, Y, Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_MODEL_NEAR, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_MODEL_NEAR;
nArgs = 4; // Object ID, NearObjectID, Model Name, Skin Name
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_FIRE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_FIRE;
nArgs = 3; // Object ID, Target ID (object to attach to), BurnTime
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_EXPLOSION_AT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_EXPLOSION_AT;
nArgs = 8; // X, Y, Z, Duration, Sound Radius, Damage Radius, Min Scale, Max Scale
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_CREATE_EXPLOSION_NEAR, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_CREATE_EXPLOSION_NEAR;
nArgs = 6; // TargetObject ID, Duration, Sound Radius, Damage Radius, Min Scale, Max Scale
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_GIB, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_GIB;
nArgs = 1; // TargetObject ID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_SCALE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_SCALE;
nArgs = 4; // TargetObject ID, Scale X, Scale Y, Scale Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_MOVE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_MOVE;
nArgs = 4; // ObjectID, X, Y, Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_TELEPORT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_TELEPORT;
nArgs = 4; // ObjectID, X, Y ,Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_MOVE_OVERTIME, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_MOVE_OVERTIME;
nArgs = 6; // ObjectID, X, Y ,Z, Interval, Duration
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAGS, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_FLAGS;
nArgs = 2; // ObjectID, FLAGS STRING
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAG_VISIBLE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_FLAG_VISIBLE;
nArgs = 2; // ObjectID, FLAGS STRING
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAG_SOLID, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_FLAG_SOLID;
nArgs = 2; // ObjectID, FLAGS STRING
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_FLAG_GRAVITY, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_FLAG_GRAVITY;
nArgs = 2; // ObjectID, FLAGS STRING
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_DIMS, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_DIMS;
nArgs = 4; // ObjectID, Dim X, Dim Y, Dim Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_OBJECT_DESTROY, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_OBJECT_DESTROY;
nArgs = 1; // ObjectID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SEND_AI_SCRIPT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_SEND_AI_SCRIPT;
nArgs = 2;
nCheckObjID = 1; // ObjectID, Script to Send
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SEND_TRIGGER, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_SEND_TRIGGER;
nArgs = 2;
nCheckObjID = 1; // ObjectID, Script to Send
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_SEND_TRIGGER_NAMED, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_SEND_TRIGGER_NAMED;
nArgs = 2;
nCheckObjID = 1; // ObjectID, Script to Send
}
/* else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_FOV, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_FOV;
nArgs = 2; // X Fov, Y Fov
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_RECT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_RECT;
nArgs = 4; // Rect L,T,R,B
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_RESET, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_RESET;
nArgs = 0;
}
*/
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_CREATE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_CREATE;
nArgs = 2; // CameraID, Type
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_DESTROY, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_DESTROY;
nArgs = 1; // CameraID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_SELECT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_SELECT;
nArgs = 1; // CameraID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_MOVE_OBJ, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_MOVE_OBJ;
nArgs = 3; // CameraID, Time, ObjID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_TELEPORT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_TELEPORT;
nArgs = 4; // CameraID, X, Y, Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_TELEPORT_OBJ, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_TELEPORT_OBJ;
nArgs = 2; // CameraID, ObjID
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_ROTATE, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_ROTATE;
nArgs = 4; // CameraID, X, Y ,Z
nCheckObjID = 1;
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_LINKSPOT, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_LINKSPOT;
nArgs = 2; // CameraID, ObjectID (if objectID is 0 then Break Link
nCheckObjID = 2; // Could be a problem here...
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_CAMERA_ZOOM, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_CAMERA_ZOOM;
nArgs = 1; // 0 Zoom False, 1 Zoom True
}
else if (_mbsicmp((const unsigned char*)SCRIPTSCENE_END, (const unsigned char*)pCmdName) == 0)
{
nType = SCRIPT_SCMD_END;
nArgs = 0;
}
return nType;
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: LoadScript
//
// PURPOSE: Reads Script Scene
//
// ----------------------------------------------------------------------- //
DBOOL Script::LoadScript(int &nEOF)
{
char line[256];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -