double CScript::DelCollection(const char* cmd, char* retStr) { if(p_SrcShape == NULL) return 0; double ret = 0; char *pGuidName = GetStringParam( cmd, 0 ); if (NULL == pGuidName) { return ret; } CGUID guid = GetVariableList()->GetGuidValue(pGuidName); if( guid == NULL_GUID ) { M_FREE( pGuidName, sizeof(char)*MAX_VAR_LEN ); return ret; } CServerRegion* pRegion = reinterpret_cast<CServerRegion*>( p_SrcShape -> GetFather() ); CShape* pShape = NULL; if( pRegion ) pShape = dynamic_cast<CShape*>( pRegion -> FindChildObject( TYPE_COLLECTION, guid) ); if( pRegion && pShape ) { pRegion->DelShapeToAround(pShape); pRegion->DeleteChildObject(pShape); ret = 1; } M_FREE( pGuidName, sizeof(char)*MAX_VAR_LEN ); return 1; }
double CScript::SetDelTimeByGuid(const char* cmd, char* retStr) { if(!p_SrcShape) return -1.0f; char* szGUID = GetStringParam(cmd, 0); int type=GetIntParam(cmd,1); int iDelTime= GetIntParam(cmd,2); if (szGUID==NULL || type== ERROR_CODE || type== INVILID_VALUE) { M_FREE( szGUID, sizeof(char)*MAX_VAR_LEN ); return 0; } if (iDelTime== ERROR_CODE || iDelTime== INVILID_VALUE) { iDelTime=0; } CGUID monsterGUID = GetVariableList()->GetGuidValue(szGUID); CServerRegion* pRegion=dynamic_cast<CServerRegion*>(p_SrcShape->GetFather()); if (pRegion!= NULL) { CMoveShape* pMoveShape= dynamic_cast<CMoveShape*>(pRegion->FindChildObject(type,monsterGUID)); if (pMoveShape!= NULL) { pMoveShape->AddDelEvent(iDelTime); } } M_FREE( szGUID, sizeof(char)*MAX_VAR_LEN ); return 0; }
double CScript::ChangeAttr(const char* CmdStr, char* retStr) { OBJECT_TYPE type; CGUID id; double value = 0; double ret = INVILID_VALUE; int param = GetIntParam(CmdStr, 0); if(param != ERROR_CODE && param != INVILID_VALUE) { type = (OBJECT_TYPE)param; char* pIdName = GetStringParam(CmdStr, 1); if(NULL == pIdName) return ret; id = GetVariableList()->GetGuidValue(pIdName); if(id == NULL_GUID) id = GetGeneralVariableList()->GetGuidValue(pIdName); if(id == NULL_GUID) id = ((CPlayer*)p_SrcShape)->GetVariableList()->GetGuidValue(pIdName); CMoveShape* shape = GetGame()->FindShape(type, id); char* name = GetStringParam(CmdStr, 2); if(name) { value = GetIntParam(CmdStr, 3); if(value != ERROR_CODE && value != INVILID_VALUE) { if(NULL == shape) // 默认id=0时,直接调用SrcShape的SetAttr接口 { CShape* cShape = GetSrcShape(); if(cShape) { ((CMoveShape*)cShape)->ChangeAttribute(string(name), value); ((CMoveShape*)cShape)->UpdateAttribute(); ret = 1; } } else { shape->ChangeAttribute(string(name), value); shape->UpdateAttribute(); ret = 1; } } } M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN ); M_FREE( name, sizeof(char)*MAX_VAR_LEN ); } else // 参数是字符串 { AddErrorLogText(CStringReading::LoadString(IDS_GS_FUNCTION, STR_GS_FUNCTION_CHANGEATTRFIRSTVARISSTRING)); } return ret; }
void JDiscreteEquality::SetVariableIndex ( const JIndex variableIndex ) { assert( (GetVariableList())->IsDiscrete(variableIndex) ); JDecisionWithVar::SetVariableIndex(variableIndex); }
void JVariableValue::SetVariableIndex ( const JIndex variableIndex ) { assert( (GetVariableList())->IsNumeric(variableIndex) ); JFunctionWithVar::SetVariableIndex(variableIndex); }
//call的扩展版本,和子脚本公用脚本变量列表 enum CScript::SCRIPTRETURN CScript::callEx(const char* CmdStr, char* retStr) { //初始为错误 CScript::SCRIPTRETURN retFlag = CScript::SR_ERROR; char *str=GetStringParam(CmdStr, 0); if (str) { #ifdef _RUNSTACKINFO_ char pszStatckInfo[10240]=""; _snprintf(pszStatckInfo,10240,"callEx(FileName:%s) Start",str); CMessage::AsyWriteFile(GetGame()->GetStatckFileName(),pszStatckInfo); #endif #ifdef _SCRIPT_INFO_ DWORD BeginTime = timeGetTime(); m_RunTime = 0; #endif CScript* pTempScript = PopFreeScript(str); InitChildScriptData(pTempScript); pTempScript->SetVariableList(GetVariableList()); // 加载脚本内容 if( pTempScript->LoadScript(str, (char*)GetGame()->GetScriptFileData(str)) ) { //记录进入子脚本 EnterChildScript(CST_CALLEX,pTempScript,"",""); retFlag = pTempScript->RunStep(); if(retFlag == CScript::SR_HANG) { #ifdef _RUNSTACKINFO_ _snprintf(pszStatckInfo,10240,"callEx(FileName:%s) Hang",str); CMessage::AsyWriteFile(GetGame()->GetStatckFileName(),pszStatckInfo); #endif #ifdef _SCRIPT_INFO_ m_RunTime += timeGetTime() - BeginTime; #endif M_FREE( str, sizeof(char)*MAX_VAR_LEN ); SetIsHang(true); SetHangFunc(pTempScript->GetHangFunc()); return retFlag; } //只要该脚本不挂起,就记录离开子脚本 LeaveChildScript(pTempScript); } #ifdef _RUNSTACKINFO_ _snprintf(pszStatckInfo,10240,"callEx(FileName:%s) End",str); CMessage::AsyWriteFile(GetGame()->GetStatckFileName(),pszStatckInfo); #endif #ifdef _SCRIPT_INFO_ GetGame()->AddScriptInfo(str, timeGetTime() - BeginTime); m_RunTime = 0; #endif pTempScript->ResetVariableList(); PushFreeScript(pTempScript); M_FREE( str, sizeof(char)*MAX_VAR_LEN ); } return retFlag; }
JBoolean JDiscreteEquality::ValueValid ( const JIndex value ) const { return JConvertToBoolean( 1 <= value && value <= (GetVariableList())->GetDiscreteValueCount(GetVariableIndex()) ); }
void JDiscreteEquality::Print ( ostream& output ) const { PrintVariable(output); output << ' ' << JPGetEqualityString() << ' '; const JString& valueName = (GetVariableList())->GetDiscreteValueName(GetVariableIndex(), itsValue); valueName.Print(output); }
JBoolean JDiscreteEquality::Evaluate() const { JIndex arrayIndex; if (EvaluateArrayIndex(&arrayIndex)) { return JConvertToBoolean( (GetVariableList())->GetDiscreteValue(GetVariableIndex(), arrayIndex) == itsValue ); } else { return kJFalse; } }
void JXExprEditor::EvaluateSelection() const { const JFunction* f; if (!GetConstSelectedFunction(&f)) { f = GetFunction(); } JXExprEvalDirector* newDir = new JXExprEvalDirector((GetWindow())->GetDirector(), GetVariableList(), *f); assert( newDir != NULL ); newDir->Activate(); }
JBoolean JVariableValue::Evaluate ( JFloat* result ) const { JIndex arrayIndex; if (EvaluateArrayIndex(&arrayIndex)) { return (GetVariableList())-> GetNumericValue(GetVariableIndex(), arrayIndex, result); } else { return kJFalse; } }
m_CurrentPlugin = pOldPlugin; \ return vaResult; // get variable for a particular plugin VARIANT CMUSHclientDoc::GetPluginVariable(LPCTSTR PluginID, LPCTSTR VariableName) { GET_PLUGIN_STUFF (GetVariable (VariableName)) } // end of CMUSHclientDoc::GetPluginVariable // get variable list for a particular plugin VARIANT CMUSHclientDoc::GetPluginVariableList(LPCTSTR PluginID) { GET_PLUGIN_STUFF (GetVariableList ()) } // end of CMUSHclientDoc::GetPluginVariableList // get trigger list for a particular plugin VARIANT CMUSHclientDoc::GetPluginTriggerList(LPCTSTR PluginID) { GET_PLUGIN_STUFF (GetTriggerList ()) } // end of CMUSHclientDoc::GetPluginTriggerList // get alias list for a particular plugin VARIANT CMUSHclientDoc::GetPluginAliasList(LPCTSTR PluginID) { GET_PLUGIN_STUFF (GetAliasList ()) } // end of CMUSHclientDoc::GetPluginAliasList
double CScript::CreateCollectionEx(const char* CmdStr, char* retStr) { CGUID ret; ret = NULL_GUID; // 返回的guid变量名 char* szRetGUID = GetStringParam(CmdStr, 0); if(!szRetGUID) return -1; //##获取lRegionID的编号,如果是0,则设置为当前场景的id char* rgnID = GetStringParam( CmdStr, 9 ); if(!rgnID) { M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN ); return -1; } CGUID lRegionID; if(CScript::GetGeneralVariableList()) lRegionID = CScript::GetGeneralVariableList()->GetGuidValue(rgnID); if(lRegionID == NULL_GUID && p_SrcShape) lRegionID = ((CPlayer*)p_SrcShape)->GetVariableList()->GetGuidValue(rgnID); if(lRegionID == NULL_GUID) lRegionID = GetVariableList()->GetGuidValue(rgnID); if( lRegionID == NULL_GUID && m_pRegion ) { lRegionID = m_pRegion->GetExID(); } char* p = GetStringParam( CmdStr, 1 ); if( p != NULL ) { double nCounts = GetIntParam( CmdStr, 2 ); double nLeft = GetIntParam( CmdStr, 3 ); double nTop = GetIntParam( CmdStr, 4 ); double nRight = GetIntParam( CmdStr, 5 ); double nBottom = GetIntParam( CmdStr, 6 ); char* strStart = GetStringParam( CmdStr, 7 ); char* strEnd = GetStringParam(CmdStr,8); double rgnType = GetIntParam( CmdStr, 10 ); int iDir = GetIntParam(CmdStr, 11); if( nCounts == ERROR_CODE || nLeft == ERROR_CODE || nRight == ERROR_CODE || nTop == ERROR_CODE || nBottom == ERROR_CODE ) { M_FREE( p, sizeof(char)*MAX_VAR_LEN ); M_FREE( strStart, sizeof(char)*MAX_VAR_LEN ); M_FREE( strEnd, sizeof(char)*MAX_VAR_LEN ); M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN ); M_FREE( rgnID, sizeof(char)*MAX_VAR_LEN ); return 0.0f; } if (iDir==ERROR_CODE || iDir== INVILID_VALUE) { iDir= -1; } CServerRegion* pRegion = NULL; switch((eRgnType)(long)rgnType) { case RGN_NORMAL: pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_NORMAL, lRegionID); break; case RGN_PERSONAL_HOUSE: pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_PERSONAL_HOUSE, lRegionID); break; case RGN_PERSONAL: pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_PERSONAL, lRegionID); break; case RGN_TEAM: pRegion = GameManager::GetInstance()->GetRgnManager()->FindRgnByRgnGUID(RGN_TEAM, lRegionID); break; } if( pRegion == NULL ) pRegion = static_cast<CServerRegion*>( m_pRegion ); if( pRegion ) { LONG lNewX = 0; LONG lNewY = 0; pRegion -> GetRandomPosInRange( lNewX, lNewY, nLeft, nTop, nRight - nLeft, nBottom - nTop ); CCollection* pLeader = pRegion -> AddCollection( p, lNewX, lNewY,iDir ); if( pLeader == NULL ) { M_FREE( p, sizeof(char)*MAX_VAR_LEN ); M_FREE( strStart, sizeof(char)*MAX_VAR_LEN ); M_FREE( strEnd, sizeof(char)*MAX_VAR_LEN ); M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN ); M_FREE( rgnID, sizeof(char)*MAX_VAR_LEN ); return 0; } //设置返回值guid if(szRetGUID) { int retFlag = SetScriptGuidValue((CMoveShape*)p_SrcShape, szRetGUID, pLeader->GetExID()); } // 添加脚本 if (strStart && strcmp(strStart,"0")!=0) { pLeader->SetStartCollectScript(strStart); } if (strEnd && strcmp(strEnd,"0")!=0) { pLeader->SetEndCollectScript(strEnd); } ret = pLeader -> GetExID(); for (int i=0; i<nCounts-1; i++) { pRegion -> GetRandomPosInRange( lNewX, lNewY, nLeft, nTop, nRight - nLeft, nBottom - nTop ); pLeader = pRegion -> AddCollection( p, lNewX, lNewY, rand()%8 ); if (pLeader) { if (strStart) { pLeader->SetStartCollectScript(strStart); } if (strEnd) { pLeader->SetEndCollectScript(strEnd); } } } } M_FREE( p, sizeof(char)*MAX_VAR_LEN ); M_FREE( strStart, sizeof(char)*MAX_VAR_LEN ); M_FREE( strEnd, sizeof(char)*MAX_VAR_LEN ); } M_FREE( szRetGUID, sizeof(char)*MAX_VAR_LEN ); M_FREE( rgnID, sizeof(char)*MAX_VAR_LEN ); return 0.0f; }