⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 script.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    g_pServerDE->BPrint(pClassName);
    return DFALSE;
} 


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CreateObjectNear
//
//	PURPOSE:	Creates a object
//
// ----------------------------------------------------------------------- //
DBOOL Script::ObjectCreateNear()
{
    char pName[MAXDATA_LEN];
    char pClassName[MAXDATA_LEN];
    
	if (!g_pServerDE || !m_hObject) return DFALSE;

    // Object ID, Class to create, NearObjectID
    
    // Arg0 = Object number
    // Arg1 = Class
    // Arg2 = NearObjectID
    
    ObjectCreateStruct theStruct;
	INIT_OBJECTCREATESTRUCT(theStruct);

    // Arg0 = Object Number
    m_nCurrLine++;
    sprintf(pName,"ScriptObj%d", atoi(m_scriptCmdList[m_nCurrLine]->data) );
    _mbscpy((unsigned char*)theStruct.m_Name, (const unsigned char*)pName);
    
    // Set the Object Index  NEED TO CHECK FOR OBJECT ALREADY USING THIS...
    m_nObjectIndex = atoi(m_scriptCmdList[m_nCurrLine]->data);

    // Arg1 = Class
    m_nCurrLine++;
    _mbscpy((unsigned char*)pClassName, (const unsigned char*)m_scriptCmdList[m_nCurrLine]->data);
    
    // Arg2 = NearObjectID
    m_nCurrLine++;
    int nNearObject = atoi(m_scriptCmdList[m_nCurrLine]->data);
    HOBJECT hNearObject = ScriptObject[nNearObject].m_hObject;
    
    
    // Store the names into the Object Array    
    _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szObjectName, (const unsigned char*)pName, MAXDATA_LEN);
    _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szClassName, (const unsigned char*)pClassName, MAXDATA_LEN);
    
	DRotation rRot;
    ROT_INIT(rRot);
    ROT_COPY(theStruct.m_Rotation, rRot);

	DVector vPos;
    g_pServerDE->GetObjectPos(m_hObject, &vPos);

    if (hNearObject)
    {
        DVector vNearPos;
        g_pServerDE->GetObjectPos(hNearObject, &vNearPos);
        
        vPos.x = vNearPos.x;
        vPos.y = vNearPos.y;
        vPos.z = vNearPos.z;
    }    

	VEC_COPY(theStruct.m_Pos, vPos);
    
	theStruct.m_NextUpdate = 0.1f;
    
	HCLASS pClass = g_pServerDE->GetClass(pClassName);
    
    // Check to make sure this is a valid class.
    if (pClass)
    {    
    	LPBASECLASS pObject = g_pServerDE->CreateObject(pClass, &theStruct);
        
        if (pObject)
        {
            ScriptObject[m_nObjectIndex].m_hObject = g_pServerDE->ObjectToHandle(pObject);
			// Link to the target so we are notified if it's destroyed
			g_pServerDE->CreateInterObjectLink(m_hObject, ScriptObject[m_nObjectIndex].m_hObject);
            
            return DTRUE;
        }
    }        
    
    g_pServerDE->BPrint("ObjectCreateNear");
    g_pServerDE->BPrint("Error creating");
    g_pServerDE->BPrint(pClassName);
    return DFALSE;
} 




// ----------------------------------------------------------------------- //
//
//	ROUTINE:	ObjectAssign
//
//	PURPOSE:	Assign a Object ID to a Object already in the world
//
// ----------------------------------------------------------------------- //
DBOOL Script::ObjectAssign()
{
    char pName[MAXDATA_LEN];
    DBOOL bFound = DFALSE;
    
	if (!g_pServerDE || !m_hObject) return DFALSE;

    // Arg0 = Object number
    // Arg1 = Target Name (search for name in the world)


    // Arg0 = Object number
    // Set the Object Index  NEED TO CHECK FOR OBJECT ALREADY USING THIS...
    m_nCurrLine++;
    m_nObjectIndex = atoi(m_scriptCmdList[m_nCurrLine]->data);
    
    // Arg1 = Target Name (search for name in the world)
    m_nCurrLine++;
    _mbsncpy((unsigned char*)pName, (const unsigned char*)m_scriptCmdList[m_nCurrLine]->data, MAXDATA_LEN);
    
	if (pName && pName[0] != '\0')
    {
    	ObjectList*	pList = g_pServerDE->FindNamedObjects(pName);
    	if (pList)
        {
	        ObjectLink* pLink = pList->m_pFirstLink;
        	while(pLink)
	        {
		        if (pLink)
    		    {
                    ScriptObject[m_nObjectIndex].m_hObject = pLink->m_hObject;
                    
                    // Set the Object Name
                    memset(ScriptObject[m_nObjectIndex].m_szObjectName, 0, MAXDATA_LEN);
                    _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szObjectName, (const unsigned char*)pName, MAXDATA_LEN);
                    
                    // Dont know the Base Class!
                    
        			// Link to the target so we are notified if it's destroyed
		        	g_pServerDE->CreateInterObjectLink(m_hObject, ScriptObject[m_nObjectIndex].m_hObject);
                    bFound = DTRUE;
	    	    }
            
	    	    pLink = pLink->m_pNext;
        	}
	    
	        g_pServerDE->RelinquishList(pList);
        }
        
        if (bFound) return DTRUE;
    }
        
    g_pServerDE->BPrint("Error: ObjectCreateAssign");
    g_pServerDE->BPrint(pName);
    return DFALSE;
} 



// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CreateObjectModelAt
//
//	PURPOSE:	Creates a object Model
//
// ----------------------------------------------------------------------- //
DBOOL Script::ObjectCreateModelAt()
{
    char pName[MAXDATA_LEN];
    char pClassName[MAXDATA_LEN];
    
	if (!g_pServerDE || !m_hObject) return DFALSE;

    // Arg0 = Object ID
    // Arg1 = Model Name
    // Arg2 = Skin Name
    // Arg3 = X Position
    // Arg4 = Y
    // Arg5 = Z
    
    ObjectCreateStruct theStruct;
	INIT_OBJECTCREATESTRUCT(theStruct);

    // Arg0 = Object Number
    m_nCurrLine++;
    sprintf(pName,"ScriptObj%d", atoi(m_scriptCmdList[m_nCurrLine]->data) );
    _mbscpy((unsigned char*)theStruct.m_Name, (const unsigned char*)pName);
    
//    g_pServerDE->BPrint(pName);

    // Set the Object Index  NEED TO CHECK FOR OBJECT ALREADY USING THIS...
    m_nObjectIndex = atoi(m_scriptCmdList[m_nCurrLine]->data);

	theStruct.m_ObjectType = OT_MODEL; 
    _mbscpy((unsigned char*)pClassName, (const unsigned char*)"BaseClass");

    // Arg1 = ModelFileName
    m_nCurrLine++;
	_mbscpy((unsigned char*)theStruct.m_Filename, (const unsigned char*)m_scriptCmdList[m_nCurrLine]->data);
    
//    g_pServerDE->BPrint(m_scriptCmdList[m_nCurrLine]->data);
    
    // Arg2 = ModelSkinName
    m_nCurrLine++;
	_mbscpy((unsigned char*)theStruct.m_SkinName, (const unsigned char*)m_scriptCmdList[m_nCurrLine]->data);
    
//    g_pServerDE->BPrint(m_scriptCmdList[m_nCurrLine]->data);
    
    
	DVector vPos;
    // Arg3 = X Position
    m_nCurrLine++;
    vPos.x = (float)atof(m_scriptCmdList[m_nCurrLine]->data);
    
    // Arg4 = Y
    m_nCurrLine++;
    vPos.y = (float)atof(m_scriptCmdList[m_nCurrLine]->data);
    
    // Arg5 = Z
    m_nCurrLine++;
    vPos.z = (float)atof(m_scriptCmdList[m_nCurrLine]->data);

	VEC_COPY(theStruct.m_Pos, vPos);

    // Store the names into the Object Array    
    _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szObjectName, (const unsigned char*)pName, MAXDATA_LEN);
    _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szClassName, (const unsigned char*)pClassName, MAXDATA_LEN);
    
	DRotation rRot;
    ROT_INIT(rRot);
    ROT_COPY(theStruct.m_Rotation, rRot);
    
	theStruct.m_NextUpdate = 0.1f;
    
	HCLASS pClass = g_pServerDE->GetClass(pClassName);
    
    // Check to make sure this is a valid class.
    if (pClass)
    {    
    	LPBASECLASS pObject = g_pServerDE->CreateObject(pClass, &theStruct);
        
        if (pObject)
        {
            ScriptObject[m_nObjectIndex].m_hObject = g_pServerDE->ObjectToHandle(pObject);

            if (ScriptObject[m_nObjectIndex].m_hObject)
            {
                // Link to the target so we are notified if it's destroyed
			    g_pServerDE->CreateInterObjectLink(m_hObject, ScriptObject[m_nObjectIndex].m_hObject);
            
                // Set the Dims
                DVector vDims;
                g_pServerDE->GetModelAnimUserDims(ScriptObject[m_nObjectIndex].m_hObject, &vDims, g_pServerDE->GetModelAnimation(ScriptObject[m_nObjectIndex].m_hObject));
            
        	    g_pServerDE->SetObjectDims(ScriptObject[m_nObjectIndex].m_hObject, &vDims);
            
                return DTRUE;
            }                
        }
    }        
    
    g_pServerDE->BPrint("ObjectCreateModel");
    g_pServerDE->BPrint("Error creating");
    g_pServerDE->BPrint(pClassName);
    return DFALSE;
} 


// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CreateObjectModelAt
//
//	PURPOSE:	Creates a object Model
//
// ----------------------------------------------------------------------- //
DBOOL Script::ObjectCreateModelNear()
{
    char pName[MAXDATA_LEN];
    char pClassName[MAXDATA_LEN];
    
	if (!g_pServerDE || !m_hObject) return DFALSE;

    // Arg0 = Object ID
    // Arg1 = NearObject ID
    // Arg2 = Model Name
    // Arg3 = Skin Name
    
    ObjectCreateStruct theStruct;
	INIT_OBJECTCREATESTRUCT(theStruct);

    // Arg0 = Object Number
    m_nCurrLine++;
    sprintf(pName,"ScriptObj%d", atoi(m_scriptCmdList[m_nCurrLine]->data) );
    _mbscpy((unsigned char*)theStruct.m_Name, (const unsigned char*)pName);
    
    // Set the Object Index  NEED TO CHECK FOR OBJECT ALREADY USING THIS...
    m_nObjectIndex = atoi(m_scriptCmdList[m_nCurrLine]->data);

    // Arg1 = NearObject ID
    m_nCurrLine++;
    int nTargetID = atoi(m_scriptCmdList[m_nCurrLine]->data);
    
    HOBJECT hLinkObject = ScriptObject[nTargetID].m_hObject;
    
    if (hLinkObject)
    {
        // Random explosion position (from the FireFX code)
            DRotation rRot;
            DVector m_vUp, m_vRight, m_vForward;
            DVector vPos, vTemp, vDir, vDims;

            VEC_INIT(m_vUp);
            VEC_INIT(m_vRight);
            VEC_INIT(m_vForward);

            g_pServerDE->GetObjectRotation(hLinkObject, &rRot);
            g_pServerDE->GetRotationVectors(&rRot, &m_vUp, &m_vRight, &m_vForward);    

            g_pServerDE->GetObjectDims(hLinkObject, &vDims);
            g_pServerDE->GetObjectPos(hLinkObject, &vPos);
            
            // Need to use the Dims of the Object to set these!!!
//			VEC_MULSCALAR(vDims, vDims, 0.8f);
            DFLOAT m_fForwardOffset = g_pServerDE->Random(-vDims.x, vDims.x);
            DFLOAT m_fUpOffset = g_pServerDE->Random(-vDims.y, vDims.y/2.0f);
            DFLOAT m_fRightOffset = g_pServerDE->Random(-vDims.z, vDims.z);
    
    	    VEC_MULSCALAR(vTemp, m_vForward, m_fForwardOffset);
        	VEC_ADD(vPos, vPos, vTemp);
    
            // vPos is a point in front of you.
            // vDir is a point in front of you, but down
        	VEC_COPY(vDir, vPos);
            vDir.y = vDir.y - m_fUpOffset;
            vDir.x = vDir.x - m_fRightOffset;
			vDir.z = vDir.z - m_fForwardOffset;
            
            VEC_COPY(vPos, vDir);
    
        	VEC_COPY(theStruct.m_Pos, vPos);
    
        theStruct.m_NextUpdate = 0.01f;

    	theStruct.m_ObjectType = OT_MODEL; 
        _mbscpy((unsigned char*)pClassName, (const unsigned char*)"BaseClass");

        // Arg2 = ModelFileName
        m_nCurrLine++;
    	_mbscpy((unsigned char*)theStruct.m_Filename, (const unsigned char*)m_scriptCmdList[m_nCurrLine]->data);
    
//    g_pServerDE->BPrint(m_scriptCmdList[m_nCurrLine]->data);
    
        // Arg3 = ModelSkinName
        m_nCurrLine++;
    	_mbscpy((unsigned char*)theStruct.m_SkinName, (const unsigned char*)m_scriptCmdList[m_nCurrLine]->data);
    
//    g_pServerDE->BPrint(m_scriptCmdList[m_nCurrLine]->data);
   
        // Store the names into the Object Array    
        _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szObjectName, (const unsigned char*)pName, MAXDATA_LEN);
        _mbsncpy((unsigned char*)ScriptObject[m_nObjectIndex].m_szClassName, (const unsigned char*)pClassName, MAXDATA_LEN);
    
//    	DRotation rRot;
        ROT_INIT(rRot);
        ROT_COPY(theStruct.m_Rotation, rRot);
    
	    theStruct.m_NextUpdate = 0.1f;
    
    	HCLASS pClass = g_pServerDE->GetClass(pClassName);
    
        // Check to make sure this is a valid class.
        if (pClass)
        {    
        	LPBASECLASS pObject = g_pServerDE->CreateObject(pClass, &theStruct);
        
            if (pObject)
            {
                ScriptObject[m_nObjectIndex].m_hObject = g_pServerDE->ObjectToHandle(pObject);

                if (ScriptObject[m_nObjectIndex].m_hObject)
                {
                    // Link to the target so we are notified if it's destroyed
    			    g_pServerDE->CreateInterObjectLink(m_hObject, ScriptObject[m_nObjectIndex].m_hObject);
            
                    // Set the Dims
                    DVector vDims;
                    g_pServerDE->GetModelAnimUserDims(ScriptObject[m_nObjectIndex].m_hObject, &vDims, g_pServerDE->GetModelAnimation(ScriptObject[m_nObjectIndex].m_hObject));
            
            	    g_pServerDE->SetObjectDims(ScriptObject[m_nObjectIndex].m_hObject, &vDims);
            
                    return DTRUE;
                }                
            }
        }        
    }
    
    g_pServerDE->BPrint("ObjectCreateModel");
    g_pServerDE->BPrint("Error creating");
    g_pServerDE->BPrint(pClassName);
    return DFALSE;
} 




// ----------------------------------------------------------------------- //
//
//	ROUTINE:	CreateObjectFire
//
//	PURPOSE:	Creates a Fire object
//
// ----------------------------------------------------------------------- //
DBOOL Script::ObjectCreateFire()
{
    char    pName[MAXDATA_LEN];
    char    pClassName[MAXDATA_LEN];
    int     nTargetID;
    char    pTargetName[MAXDATA_LEN];
    HOBJECT hTargetObject = DNULL;
    DFLOAT  fBurnTime = 0.0f;
    
	if (!g_pServerDE || !m_hObject) return DFALSE;

    // Arg0 = Object ID
    // Arg1 = Target ID (object to attach to)
    // Arg2 = BurnTime
    
    ObjectCreateStruct theStruct;
	INIT_OBJECTCREATESTRUCT(theStruct);

    // Arg0 = Object ID
    m_nCurrLine++;
    sprintf(pName,"ScriptObj%d", atoi(m_scriptCmdList[m_nCurrLine]->data) );
    _mbscpy((unsigned char*)theStruct.m_Name, (const unsigned char*)pName);
    
    // Set the Object Index  NEED TO CHECK FOR OBJECT ALREADY USING THIS...

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -