📄 script.cpp
字号:
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 + -