_MEMBER_FUNCTION_IMPL(xml, constructor) { const char * filename; sq_getstring(pVM, -1, &filename); if(filename) { CXML * pXML = new CXML(); String strFileName(filename); SharedUtility::RemoveIllegalCharacters(strFileName); String strPath(SharedUtility::GetAbsolutePath("files/%s", strFileName.Get())); pXML->load(strPath); if(!pXML || SQ_FAILED(sq_setinstance(pVM, pXML))) { CLogFile::Print("Failed to load the xml."); SAFE_DELETE(pXML); sq_pushbool(pVM, false); return 1; } _SET_RELEASE_HOOK(xml); sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
_MEMBER_FUNCTION_IMPL(xml, nodeNew) { CXML * pXML = sq_getinstance<CXML *>(pVM); if(!pXML) { CLogFile::Print("Failed to get the XML instance."); sq_pushbool(pVM, false); return 1; } SQBool linkNewXml; const char * XmlName; sq_getbool(pVM, -2, &linkNewXml); sq_getstring(pVM, -1, &XmlName); #pragma warning(disable:4800) bool linkXml = (bool)linkNewXml; pXML->newNode(XmlName, linkXml); sq_pushbool(pVM, true); return 1; }
_MEMBER_FUNCTION_IMPL(timer, isActive) { CScriptTimer * pTimer = sq_getinstance<CScriptTimer *>(pVM); if(!pTimer) { CLogFile::Print("Failed to get the timer instance."); sq_pushbool(pVM, false); return 1; } if(CScriptTimerManager::GetInstance()->contains(pTimer)) { if(pTimer->IsDead()) { sq_setinstance(pVM, NULL); sq_pushbool(pVM, false); return 1; } sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
_MEMBER_FUNCTION_IMPL(timer, constructor) { // Check the param count CHECK_PARAMS_MIN("timer", 3); // if( sq_gettype( pVM, 2 ) != OT_NATIVECLOSURE ) CHECK_TYPE("timer", 1, 2, OT_CLOSURE); // Check the params CHECK_TYPE("timer", 2, 3, OT_INTEGER); CHECK_TYPE("timer", 3, 4, OT_INTEGER); SQInteger iInterval = 0; SQInteger iRepeations = 0; // Get the params sq_getinteger( pVM, 3, &iInterval ); sq_getinteger( pVM, 4, &iRepeations ); // Invalid repeations? if( iRepeations < -1 || iRepeations == 0 ) { sq_pushbool( pVM, false ); return 1; } // Get the timer end function SQObjectPtr pFunction = stack_get( pVM, 2 ); // Create the arguments CSquirrelArguments * pArguments = new CSquirrelArguments( pVM, 5 ); // Get the current script instance #ifdef _CLIENT CSquirrel * pScript = pCore->GetClientScriptingManager()->GetScriptingManager()->Get( pVM ); #else CSquirrel * pScript = pCore->GetScriptingManager()->Get( pVM ); #endif // Create the timer instance CTimer * pTimer = new CTimer( pScript, pFunction, iInterval, iRepeations, pArguments ); // Did it fail to set the timer instance? if( SQ_FAILED( sq_setinstance( pVM, pTimer) ) ) { // Delete the timer SAFE_DELETE( pTimer ); sq_pushbool( pVM, false ); return 1; } // Add the timer into the manager pCore->GetTimerManager()->push_back( pTimer ); sq_pushbool( pVM, true ); return 1; }
/* * Check if the sandbox is enabled */ SQInteger emoRuntimeIsSandboxEnabled(HSQUIRRELVM v) { #ifdef EMO_WITH_SANDBOX sq_pushbool(v, true); #else sq_pushbool(v, false); #endif return 1; }
int app_sqlang_return_boolean(HSQUIRRELVM J, int b) { if(b==SRSQLANG_FALSE) sq_pushbool(J, SRSQLANG_FALSE); else sq_pushbool(J, SRSQLANG_TRUE); return 1; }
// write SQInteger file_put_contents(HSQUIRRELVM v) { // function parameters const SQChar* filename; const SQChar* contents; // internal structures apr_file_t* file; apr_size_t nbytes; apr_status_t status; request_rec* r = get_request_rec(v); // for error messages char error[120]; char errorMessage[120]; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_put_contents()"); // grab filename param if( sq_gettype(v, 2) != OT_STRING ) { return SQ_ERROR; } else if( SQ_FAILED(sq_getstring(v, 2, &filename)) ) { return SQ_ERROR; } // grab contents param if( sq_gettype(v, 3) != OT_STRING ) { return SQ_ERROR; } else if( SQ_FAILED(sq_getstring(v, 3, &contents)) ) { return SQ_ERROR; } nbytes = strlen(contents); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_put_contents('%s', '%s') %d", filename, contents, (int)nbytes); if( (status = apr_file_open(&file, filename, APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool)) != APR_SUCCESS ) { apr_strerror(status, error, sizeof error); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_put_contents() failed: %s", error); sprintf(errorMessage, "file_put_contents() failed: %s", error); errorfunc(v, errorMessage); sq_pushbool(v, SQFalse); } else if( (status = apr_file_write(file, contents, &nbytes)) != APR_SUCCESS ) { apr_strerror(status, error, sizeof error); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_put_contents() failed: %s", error); sprintf(errorMessage, "file_put_contents() failed: %s", error); errorfunc(v, errorMessage); sq_pushbool(v, SQFalse); } else { sq_pushinteger(v, nbytes); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_put_contents() wrote %d bytes", (int)nbytes); } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_put_contents() returning 1"); return 1; }
// read SQInteger file_get_contents(HSQUIRRELVM v) { // function parameters const SQChar* filename; char* contents; // internal structures apr_file_t* file; apr_finfo_t finfo; apr_size_t nbytes; apr_status_t status; request_rec* r = get_request_rec(v); // for error messages char error[120]; char errorMessage[120]; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_get_contents()"); // grab filename param if( sq_gettype(v, 2) != OT_STRING ) { return SQ_ERROR; } else if( SQ_FAILED(sq_getstring(v, 2, &filename)) ) { return SQ_ERROR; } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_get_contents('%s')", filename); if( (status = apr_file_open(&file, filename, APR_READ, APR_OS_DEFAULT, r->pool)) != APR_SUCCESS ) { apr_strerror(status, error, sizeof error); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_get_contents() failed: %s", error); sprintf(errorMessage, "file_get_contents() failed: %s", error); errorfunc(v, errorMessage); sq_pushbool(v, SQFalse); return 1; } // figure out file size and allocate enough room to read it all in status = apr_file_info_get(&finfo, APR_FINFO_NORM, file); nbytes = finfo.size; ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_get_contents() file is %d", (int)nbytes); contents = apr_palloc(r->pool, finfo.size); if( (status = apr_file_read(file, contents, &nbytes)) != APR_SUCCESS ) { apr_strerror(status, error, sizeof error); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_get_contents() failed: %s", error); sprintf(errorMessage, "file_get_contents() read %d bytes, but failed: %s", (int)nbytes, error); errorfunc(v, errorMessage); sq_pushbool(v, SQFalse); } else { contents[nbytes] = '\0'; sq_pushstring(v, contents, -1); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, " file_get_contents() read %d bytes", (int)nbytes); } ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "file_get_contents() returning 1"); return 1; }
static SQInteger container_rawexists(HSQUIRRELVM v) { if(SQ_SUCCEEDED(sq_rawget(v,-2))) { sq_pushbool(v,SQTrue); return 1; } sq_pushbool(v,SQFalse); return 1; }
// GUIImage _MEMBER_FUNCTION_IMPL(GUIImage, constructor) { const char * filename; sq_getstring(pVM, -1, &filename); // check file size /*FILE* pFile = fopen(filename, "rb"); fseek(pFile, 0L, SEEK_END); int len = ftell(pFile); if(len == 0) { sq_pushbool(pVM, false); fclose(pFile); return 1; } fclose(pFile);*/ // Get our GUI CGUI * pGUI = g_pClient->GetGUI(); String szName = pGUI->GetUniqueName(); // Try to load the image try { CEGUI::ImagesetManager::getSingleton().createFromImageFile(szName.C_String(), filename, "resources"); CGUIStaticImage * pImage = pGUI->CreateGUIStaticImage(CEGUI::String(szName.C_String())); pImage->setProperty("FrameEnabled", "false"); pImage->setProperty("BackgroundEnabled", "false"); pImage->setProperty("Image", String("set:%s image:full_image", szName.C_String()).C_String()); if(!pImage || SQ_FAILED(sq_setinstance(pVM, pImage))) { CLogFile::Printf("Can't create GUIImage."); sq_pushbool(pVM, false); return 1; } //_SET_RELEASE_HOOK(GUIElement); CClientScriptManager * pClientScriptManager = g_pClient->GetClientScriptManager(); pClientScriptManager->GetGUIManager()->Add(pImage, pClientScriptManager->GetScriptingManager()->Get(pVM)); SubscribeGuiEvents(pImage); pImage->setVisible(true); sq_pushbool(pVM, true); return 1; } catch(CEGUI::Exception e) { // Failed to load, might not exist CLogFile::Printf("Can't create GUIImage (%s does not exist)", filename); sq_pushbool(pVM, false); return 1; } }
static SQRESULT sq_mysql_result_eof(HSQUIRRELVM v){ SQ_FUNC_VARS_NO_TOP(v); GET_mysql_result_INSTANCE(); sq_pushstring(v, _curr_row_key, -1); if(sq_get(v, 1) == SQ_OK){ SQ_GET_INTEGER(v, -1, curr_row); sq_pushbool(v, curr_row < dlmysql_num_rows(self)); } else sq_pushbool(v, SQTrue); return 1; }
/** * TJSオブジェクトの有効確認 * 引数1 オブジェクト */ SQRESULT TJSObject::tjsIsValid(HSQUIRRELVM v) { tTJSVariant instance; if (getVariant(v,1,&instance) && instance.Type() == tvtObject) { SQBool ret = instance.AsObjectClosureNoAddRef().IsValid(0, NULL, NULL, NULL) == TJS_S_TRUE ? SQTrue : SQFalse; sq_pushbool(v, ret); return 1; } sq_pushbool(v, SQFalse); return 1; }
SQInteger SFXed(HSQUIRRELVM v) { if (AppXed()) { sq_pushbool(Scripts.vm, SQTrue); } else { sq_pushbool(Scripts.vm, SQFalse); } return 1; }
_MEMBER_FUNCTION_IMPL(GUIElement, getVisible) { CGUIFrameWindow * pWindow = sq_getinstance<CGUIFrameWindow *>(pVM); if(!pWindow) { sq_pushbool(pVM, false); return 1; } sq_pushbool(pVM, pWindow->isVisible()); return 1; }
static SQInteger _regexp_match(HSQUIRRELVM v) { SETUP_REX(v); const SQChar *str; sq_getstring(v,2,&str); if(sqstd_rex_match(self,str) == SQTrue) { sq_pushbool(v,SQTrue); return 1; } sq_pushbool(v,SQFalse); return 1; }
_MEMBER_FUNCTION_IMPL(GUICheckBox, isChecked) { CEGUI::Checkbox * pWindow = sq_getinstance<CEGUI::Checkbox *>(pVM); if(!pWindow) { sq_pushbool(pVM, false); return 1; } sq_pushbool(pVM, pWindow->isSelected()); return 1; }
// deletePickup(pickupid) SQInteger CPickupNatives::Delete(SQVM * pVM) { SQInteger pickupid; sq_getinteger(pVM, -1, &pickupid); if(g_pPickupManager->DoesExist(pickupid)) { g_pPickupManager->Delete(pickupid); sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
// removeRule(name) SQInteger CServerNatives::RemoveRule(SQVM * pVM) { if(!g_pQuery) { // If <query> is disabled on server. sq_pushbool(pVM, false); return 1; } const char* rule; sq_getstring(pVM, -1, &rule); sq_pushbool(pVM, g_pQuery->RemoveRule(rule)); return 1; }
// setPickupValue(pickupid, value) SQInteger CPickupNatives::SetValue(SQVM * pVM) { SQInteger pickupid; sq_getinteger(pVM, 2, &pickupid); if(g_pPickupManager->DoesExist(pickupid)) { SQInteger pvalue; sq_getinteger(pVM, 3, &pvalue); sq_pushbool(pVM, g_pPickupManager->SetValue(pickupid, pvalue)); return 1; } sq_pushbool(pVM, false); return 1; }
// setPickupRotation(Pickupid, x, y, z) SQInteger CPickupNatives::SetRotation(SQVM * pVM) { SQInteger pickupid; sq_getinteger(pVM, 2, &pickupid); if(g_pPickupManager->DoesExist(pickupid)) { CVector3 vecPosition; sq_getvector3(pVM, 3, &vecPosition); sq_pushbool(pVM, g_pPickupManager->SetRotation(pickupid, vecPosition)); return 1; } sq_pushbool(pVM, false); return 1; }
_MEMBER_FUNCTION_IMPL(xml, save) { CXML * pXML = sq_getinstance<CXML *>(pVM); if(!pXML) { CLogFile::Print("Failed to get the XML instance."); sq_pushbool(pVM, false); return 1; } sq_pushbool(pVM, pXML->save()); return 1; }
SQInteger SFKeyPressed(HSQUIRRELVM v) { int key; sq_getinteger(Scripts.vm, 2, &key); if (InputKeyPressed(key)) { sq_pushbool(Scripts.vm, SQTrue); } else { sq_pushbool(Scripts.vm, SQFalse); } return 1; }
_MEMBER_FUNCTION_IMPL(GUIElement, deactivate) { CGUIFrameWindow * pWindow = sq_getinstance<CGUIFrameWindow *>(pVM); if(!pWindow) { sq_pushbool(pVM, false); return 1; } pWindow->deactivate(); sq_pushbool(pVM, true); return 1; }
// setDayOfWeek(day) SQInteger CWorldNatives::SetDayOfWeek(SQVM * pVM) { SQInteger iDay; sq_getinteger(pVM, 2, &iDay); if(iDay >= 0 && iDay <= 6) { CTime::GetInstance()->SetDayOfWeek(iDay); sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
_MEMBER_FUNCTION_IMPL(xml, save) { // Get the xml instance pointer CXML * pXML = sq_getinstance< CXML* >( pVM ); // Is the xml instance invalid? if( !pXML ) { sq_pushbool( pVM, false ); return 1; } sq_pushbool( pVM, pXML->Save() ); return 1; }
_MEMBER_FUNCTION_IMPL(xml, nodeClear) { CXML * pXML = sq_getinstance<CXML *>(pVM); if(!pXML) { CLogFile::Print("Failed to get the XML instance."); sq_pushbool(pVM, false); return 1; } pXML->nodeClear(); sq_pushbool(pVM, true); return 1; }
// deleteActor(actorid) SQInteger CActorNatives::Delete(SQVM * pVM) { EntityId actorId; sq_getentity(pVM, -1, &actorId); if(g_pActorManager->DoesExist(actorId)) { g_pActorManager->Delete(actorId); sq_pushbool(pVM, true); return 1; } sq_pushbool(pVM, false); return 1; }
static SQRESULT sq_libclang_loadlib(HSQUIRRELVM v) { SQ_FUNC_VARS_NO_TOP(v); SQ_GET_STRING(v, 2, libname); sq_pushbool(v, load_dynamicLib(libname)); return 1; }
_MEMBER_FUNCTION_IMPL(GUIElement, setVisible) { CGUIFrameWindow * pWindow = sq_getinstance<CGUIFrameWindow *>(pVM); if(!pWindow) { sq_pushbool(pVM, false); return 1; } SQBool visible; sq_getbool(pVM, -1, &visible); pWindow->setVisible(visible != 0); sq_pushbool(pVM, true); return 1; }
_MEMBER_FUNCTION_IMPL(GUIElement, getPosition) { SQBool relative; sq_getbool(pVM, -1, &relative); CGUIFrameWindow * pWindow = sq_getinstance<CGUIFrameWindow *>(pVM); if(!pWindow) { sq_pushbool(pVM, false); return 1; } CEGUI::Vector2 pos; if(relative != 0) { pos = pWindow->getPosition().asRelative((CEGUI::Size(g_pClient->GetGUI()->GetDisplayWidth (), g_pClient->GetGUI()->GetDisplayHeight()))); } else { pos = pWindow->getPosition().asAbsolute((CEGUI::Size(g_pClient->GetGUI()->GetDisplayWidth (), g_pClient->GetGUI()->GetDisplayHeight()))); } CSquirrelArguments args; args.push(pos.d_x); args.push(pos.d_y); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; }