Exemplo n.º 1
0
static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
{
	SQPRINTFUNCTION pf = sq_getprintfunc(v);
	if(pf) {
		const SQChar *sErr = 0;
		if(sq_gettop(v)>=1) {
			if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr)))	{
				pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr);
			}
			else{
				pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n"));
			}
			sqstd_printcallstack(v);
		}
	}
	return 0;
}
Exemplo n.º 2
0
_MEMBER_FUNCTION_IMPL(xml, nodeFind)
{
    CXML * pXML = sq_getinstance<CXML *>(pVM);

    if(!pXML)
    {
        CLogFile::Print("Failed to get the XML instance.");
        sq_pushbool(pVM, false);
        return 1;
    }

    const char * nodeName;
    sq_getstring(pVM, -1, &nodeName);

    sq_pushbool(pVM, pXML->findNode(nodeName));
    return 1;

}
Exemplo n.º 3
0
SQInteger PrintRuntimeError(HSQUIRRELVM v)
{
	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
	if(pf) {
		const SQChar *sErr = 0;
		if(sq_gettop(v)>=1) {
			if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr)))	{
				pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr);
			}
			else{
				pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n"));
			}
			PrintCallStack(v);
		}
	}

	return 0;
}
Exemplo n.º 4
0
/*
 * returns database path with given name
 *
 * @param database name
 * @param database path
 */
SQInteger emoDatabaseGetPath(HSQUIRRELVM v) {
    const SQChar* name;
    SQInteger nargs = sq_gettop(v);
    if (nargs >= 2 && sq_gettype(v, 2) == OT_STRING) {
        sq_tostring(v, 2);
        sq_getstring(v, -1, &name);
        sq_poptop(v);
    } else {
        return 0;
    }

    std::string path  = engine->database->getPath(name);
    const char* cpath = path.c_str();

    sq_pushstring(v, cpath, -1);

    return 1;
}
Exemplo n.º 5
0
SQInteger getter_v4(HSQUIRRELVM v) {
	SQChar const * key; sq_getstring(v,2,(SQChar const**)&key);
	glm::vec4* obj;
	SQInteger error = 0;
	sq_getinstanceup(v,1,(SQUserPointer*)&obj, 0);
	if(!strcmp(key, "x")){
		sq_pushfloat(v,obj->x);
	}else if(!strcmp(key, "y")){
		sq_pushfloat(v,obj->y);
	}else if(!strcmp(key, "z")){
		sq_pushfloat(v,obj->z);
	}else if(!strcmp(key, "w")){
		sq_pushfloat(v,obj->w);
	}else{
		return sq_throwerror(v, "invalid param");
	}
	return 1;
}
Exemplo n.º 6
0
void CSquirrelVM::Pop(CString& str, CString strDefaultValue)
{
	SQObjectType argType = sq_gettype(m_pVM, m_iStackIndex);
	if (argType == OT_STRING)
	{
		const char* c = NULL;
		sq_getstring(m_pVM, m_iStackIndex++, &c);
		str = c;
		return;
	} else {
		if(argType == OT_NULL) {
			str = strDefaultValue;
		}
	}

	str = "";
	m_iStackIndex++;
}
Exemplo n.º 7
0
static int flash_device_name_get(HSQUIRRELVM v, int index, const wgChar **str)
{
	sq_pushroottable(v);
	sq_pushstring(v, _SC("flash_device_name_get"), -1);
	if(SQ_SUCCEEDED(sq_get(v,-2))){
		sq_pushroottable(v);
		sq_pushinteger(v, index);
		SQRESULT r = sq_call(v, 2, SQTrue, SQTrue);
		assert(r == SQ_OK);
		r++;
	}
	if(sq_gettype(v, -1) != OT_STRING){
		return 0;
	}
	if(SQ_FAILED(sq_getstring(v, -1, str))){
		return 0;
	}
	return 1;
}
Exemplo n.º 8
0
static SQInteger _mod_filesize(HSQUIRRELVM v) {
    const SQChar* fname;
    sq_getstring(v, 2, &fname);
    if(fname) {
        char fullname[512];
        if(fname[0]=='/')
            sprintf(fullname,"%s",fname);
        else
            sprintf(fullname,"%s/%s",__pSQ->ctx()->_dir_home,fname);
        struct stat stt;
        if(stat(fullname, &stt)==0) {
            sq_pushinteger(v, stt.st_size);
            return stt.st_size;
        }else{
            sq_pushinteger(v, 0);
        }
    }
    return 1;
}
Exemplo n.º 9
0
std::string read_string(HSQUIRRELVM vm, const char* name)
{
  sq_pushstring(vm, name, -1);
  if(SQ_FAILED(sq_get(vm, -2))) {
    std::ostringstream msg;
    msg << "Couldn't get string value for '" << name << "' from table";
    throw scripting::SquirrelError(vm, msg.str());
  }

  const char* result;
  if(SQ_FAILED(sq_getstring(vm, -1, &result))) {
    std::ostringstream msg;
    msg << "Couldn't get string value for '" << name << "' from table";
    throw scripting::SquirrelError(vm, msg.str());
  }
  sq_pop(vm, 1);

  return std::string(result);
}
/*
 * Runtime echo
 *
 * @param message
 * @return given message
 */
SQInteger emoRuntimeEcho(HSQUIRRELVM v) {
    const SQChar *str;
    SQInteger nargs = sq_gettop(v);
    for (SQInteger n = 1; n <= nargs; n++) {
        if (sq_gettype(v, n) == OT_STRING) {
            sq_tostring(v, n);
            sq_getstring(v, -1, &str);
            sq_poptop(v);
        } else {
            str = NULL;
        }
    }

    if (str != NULL) {
        sq_pushstring(v, str, -1);
    }

    return 1;
}
Exemplo n.º 11
0
int CEventNatives::Call(SQVM* pVM)
{
	// we need enough parameters
	if(sq_gettop(pVM)<3)
	{
		sq_pushbool(pVM, false);
		return 1;
	}

	// get the event name
	const char* szEventName;
	if(SQ_FAILED(sq_getstring(pVM, 2, &szEventName)))
	{
		sq_pushbool(pVM, false);
		return 1;
	}

	// get the entity which it should effect
	CEntity* pEntity = sq_toentity(pVM, 3);

	// if we have a valid entity, use it
	if(pEntity)
	{
		// collect the parameters
		CSquirrelArguments* pArguments = new CSquirrelArguments();
		for(int i = 4; i <= sq_gettop(pVM); ++ i)
		{
			// push all arguments from the stack
			if(!pArguments->pushFromStack(pVM, i))
			{
				sq_pushbool(pVM, false);
				delete pArguments;
				return 1;
			}
		}
		sq_pushbool(pVM, pEntity->CallEvent(szEventName, pArguments));
		delete pArguments;
	}
	else
		sq_pushbool(pVM, false);

	return 1;
}
Exemplo n.º 12
0
// Font
_MEMBER_FUNCTION_IMPL(GUIFont, constructor)
{
	if(sq_gettop(pVM) < 2)
	{
		sq_pushbool(pVM, false);
		return 1;
	}

	const char * szFont;
	int iSize = 8;
	bool bScaled = false;

	sq_getstring(pVM, 2, &szFont);
	if(sq_gettop(pVM) >= 3)
	{
		sq_getinteger(pVM, 3, &iSize);
		if(iSize < 3 || iSize > 100)
		{
			sq_pushbool(pVM, false);
			return 1;
		}

		if(sq_gettop(pVM) >= 4)
		{
			SQBool sqb;
			sq_getbool(pVM, 4, &sqb);
			bScaled = sqb != 0;
		}
	}


	CEGUI::Font * pFont = g_pClient->GetGUI()->GetFont(szFont, iSize, bScaled);

	if(!pFont || SQ_FAILED(sq_setinstance(pVM, pFont)))
	{
		CLogFile::Printf("Can't create GUIFont.");
		sq_pushbool(pVM, false);
		return 1;
	}

	sq_pushbool(pVM, true);
	return 1;
}
Exemplo n.º 13
0
/*
 * delete preference with given key
 *
 * @param preference key
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoDatabaseDeletePreference(HSQUIRRELVM v) {
    const SQChar* key;
    SQInteger nargs = sq_gettop(v);
    if (nargs >= 2 && sq_gettype(v, 2) == OT_STRING) {
        sq_tostring(v, 2);
        sq_getstring(v, -1, &key);
        sq_poptop(v);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }
    if (!engine->database->deletePreference(key)) {
        sq_pushinteger(v, ERR_DATABASE);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);
    return 1;
}
Exemplo n.º 14
0
SQInteger SFSpriteCreateText(HSQUIRRELVM v)
{
    char *text;
    int fontnum;
    int text_r;
    int text_g;
    int text_b;
    int sprite;
    sq_getstring(Scripts.vm, 2, (const char **)&text);
    sq_getinteger(Scripts.vm, 3, &fontnum);
    sq_getinteger(Scripts.vm, 4, &text_r);
    sq_getinteger(Scripts.vm, 5, &text_g);
    sq_getinteger(Scripts.vm, 6, &text_b);

    sprite = SpritesCreateText(text, fontnum, text_r, text_g, text_b,
                               WRAP_NOWRAP);
    sq_pushinteger(Scripts.vm, sprite);
    return 1;
}
Exemplo n.º 15
0
SQInteger setter_v3(HSQUIRRELVM v){
	SQChar const * key; sq_getstring(v,2,(SQChar const**)&key);
	glm::vec3* obj;
	SQInteger error = 0;
	sq_getinstanceup(v,1,(SQUserPointer*)&obj,0);
	if(!strcmp(key, "x")){
		float val;error = with_assert_sq_getfloat(v,3,val);if(error) return error;
		obj->x = val;
	}else if(!strcmp(key, "y")){
		float val;error = with_assert_sq_getfloat(v,3,val);if(error) return error;
		obj->y = val;
	}else if(!strcmp(key, "z")){
		float val;error = with_assert_sq_getfloat(v,3,val);if(error) return error;
		obj->z = val;
	}else{
		return sq_throwerror(v, "invalid param");
	}
	return 0;
}
Exemplo n.º 16
0
SQInteger sq_setTextForAll(SQVM * pVM)
{
	SQInteger textId;
	const char * szText;

	sq_getstring(pVM, -1, &szText);
	sq_getinteger(pVM, -2, &textId);

	if(pNetowkManager->GetTextManager()->GetSlotState(textId))
	{
		pNetowkManager->GetTextManager()->GetAt(textId)->SetText(szText);

		sq_pushbool(pVM, true);
		return 1;
	}

	sq_pushbool(pVM, false);
	return 1;		
}
Exemplo n.º 17
0
/*
 * Shows Android toast message
 */
SQInteger emoRuntimeAndroidToast(HSQUIRRELVM v) {
    SQInteger nargs = sq_gettop(v);

    const SQChar* text;
    if (nargs >= 2 && sq_gettype(v, 2) == OT_STRING) {
        sq_tostring(v, 2);
        sq_getstring(v, -1, &text);
        sq_poptop(v);
    }

    SQInteger duration = ANDROID_TOAST_SHORT;
    if (nargs <= 3 && sq_gettype(v, 3) == OT_INTEGER) {
        sq_getinteger(v, 3, &duration);
    }

    engine->javaGlue->callStringInt_Void("toast", text, duration);

    return 0;
}
Exemplo n.º 18
0
SQInteger SFSpriteChangeText(HSQUIRRELVM v)
{
    int spriteNum;
    char *text;
    int fontNum;
    int textR;
    int textG;
    int textB;
    sq_getinteger(Scripts.vm, 2, &spriteNum);
    sq_getstring(Scripts.vm, 3, (const char **)&text);
    sq_getinteger(Scripts.vm, 4, &fontNum);
    sq_getinteger(Scripts.vm, 5, &textR);
    sq_getinteger(Scripts.vm, 6, &textG);
    sq_getinteger(Scripts.vm, 7, &textB);

    SpritesChangeText(spriteNum, text, fontNum, textR, textG, textB,
                      WRAP_NOWRAP);
    return 0;
}
Exemplo n.º 19
0
_MEMBER_FUNCTION_IMPL(xml, constructor)
{
    // Get the filename
    const char * szFileName;
    sq_getstring( pVM, -1, &szFileName );

    // Do we have a valid filename?
    if( szFileName )
    {
        // Generate the path string
        String strPath;
#ifdef _CLIENT
        strPath = pCore->GetClientScriptingManager()->GetScriptingManager()->Get( pVM )->GetPath();
        strPath = SharedUtility::GetFileNameForScriptFile( szFileName, strPath.Get(), pCore->GetHost().Get(), pCore->GetPort() );
#else
        strPath = pCore->GetScriptingManager()->Get( pVM )->GetPath();
        strPath = SharedUtility::GetFileNameForScriptFile( szFileName, strPath.Get() );
#endif

        // Create the XML instance
        CXML * pXML = new CXML( strPath.Get() );

        // Did the XML instance fail to create or set the squirrel instance?
        if( !pXML || SQ_FAILED( sq_setinstance( pVM, pXML ) ) )
        {
            // Delete the xml instance
            if( pXML )
                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;
}
Exemplo n.º 20
0
SQInteger SquirrelStd::require(HSQUIRRELVM vm)
{
	SQInteger top = sq_gettop(vm);
	const SQChar *filename;
	SQChar *real_filename;

	sq_getstring(vm, 2, &filename);

	/* Get the script-name of the current file, so we can work relative from it */
	SQStackInfos si;
	sq_stackinfos(vm, 1, &si);
	if (si.source == NULL) {
		DEBUG(misc, 0, "[squirrel] Couldn't detect the script-name of the 'require'-caller; this should never happen!");
		return SQ_ERROR;
	}
	real_filename = scstrdup(si.source);
	/* Keep the dir, remove the rest */
	SQChar *s = scstrrchr(real_filename, PATHSEPCHAR);
	if (s != NULL) {
		/* Keep the PATHSEPCHAR there, remove the rest */
		s++;
		*s = '\0';
	}
	/* And now we concat, so we are relative from the current script
	 * First, we have to make sure we have enough space for the full path */
	real_filename = ReallocT(real_filename, scstrlen(real_filename) + scstrlen(filename) + 1);
	scstrcat(real_filename, filename);
	/* Tars dislike opening files with '/' on Windows.. so convert it to '\\' ;) */
	char *filen = strdup(SQ2OTTD(real_filename));
#if (PATHSEPCHAR != '/')
	for (char *n = filen; *n != '\0'; n++) if (*n == '/') *n = PATHSEPCHAR;
#endif

	bool ret = Squirrel::LoadScript(vm, filen);

	/* Reset the top, so the stack stays correct */
	sq_settop(vm, top);
	free(real_filename);
	free(filen);

	return ret ? 0 : SQ_ERROR;
}
Exemplo n.º 21
0
SQInteger CUtilNatives::PlayerIdFromName( SQVM * pVM )
{
	const SQChar * szName;
	sq_getstring( pVM, -1, &szName );

	for ( EntityId i = 0; i < MAX_PLAYERS; i ++ )
	{
		if ( pCore->GetPlayerManager()->IsActive ( i ) )
		{
			if ( !strcmp ( szName, pCore->GetPlayerManager()->Get( i )->GetNick() ) )
			{
				sq_pushinteger( pVM, pCore->GetPlayerManager()->Get( i )->GetId () );
				return 1;
			}
		}
	}

	sq_pushinteger( pVM, INVALID_ENTITY_ID );
	return 1;
}
Exemplo n.º 22
0
static SQInteger _mod_readfile(HSQUIRRELVM v) {
    const SQChar* fname;
    SQInteger   bytes=0;
    sq_getstring(v, 2, &fname);
    sq_getinteger(v, 3, &bytes);
    FILE * pf = fopen(fname,"rb");
    if(!pf) {return sq_throwerror(v,_SC("popen(null_pointer, 0 bytes) error"));}
    if(pf) {
        char* pc = new char[bytes+1];
        if(pc) {
            bytes = fread(pc, 1, bytes, (FILE*)pf);
            if(bytes>0) {
                pc[bytes] = 0;
                sq_pushstring(v, pc, bytes);
            }
            delete[] pc;
        }
    }
    return 1;
}
Exemplo n.º 23
0
SQInteger Sq_GetInfo(HSQUIRRELVM v) {
  const SQChar *What;
  sq_getstring(v, 2, &What);

  if(!strcasecmp(What, "filename"))
    sq_pushstring(v, FilenameOnly(LevelFilename), -1);
  else if(!strcasecmp(What, "numlayers"))
    sq_pushinteger(v, NumLayers);
  else if(!strcasecmp(What, "width"))
    sq_pushinteger(v, LevelW);
  else if(!strcasecmp(What, "height"))
    sq_pushinteger(v, LevelH);
  else if(!strcasecmp(What, "cameraX"))
    sq_pushinteger(v, CameraX);
  else if(!strcasecmp(What, "cameraY"))
    sq_pushinteger(v, CameraY);
  else
    sq_pushnull(v);
  return 1;
}
Exemplo n.º 24
0
// getRule(name)
SQInteger CServerNatives::GetRule(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);
	QueryRule * pRule = g_pQuery->GetRule(rule);

	if(pRule)
		sq_pushstring(pVM, pRule->strValue.Get(), -1);
	else
		sq_pushbool(pVM, false);

	return 1;
}
Exemplo n.º 25
0
//   BOOL ViCbSetToolTip(VApiHandle hWnd, LPCTSTR pstrName)
SQInteger ViCbSetToolTip(HSQUIRRELVM v)
{
	SQInteger      nargs         = sq_gettop(v);
	SQInteger      Handle        = 0;
	CControlUI*    pCtrl         = NULL;
	LPCTSTR        pstrName      = NULL;
	if (!v || 2 + 1 != nargs) {goto _Exit_;}
	if (OT_INTEGER != sq_gettype(v, 2)) {goto _Exit_;}
	if (OT_STRING != sq_gettype(v, 3)) {goto _Exit_;}
	
	sq_getinteger(v, 2, &Handle);
	sq_getstring(v, 3, &pstrName);
	pCtrl = QiHwHandleToCtrl(Handle);
	if (!pCtrl) {goto _Exit_;}
	pCtrl->SetToolTip(pstrName);
	
_Exit_:
	sq_pushbool(v, TRUE);
	return 1;
}
Exemplo n.º 26
0
int AnimSquirrel::getJobID(SQVM* v)
{
    const char* tChar;
    int ID;
    int retVal = 0;
    SQInteger nargs = sq_gettop(v);
    if(nargs >= 3)
    {
        sq_getstring(v,3,&tChar);
        sq_getinteger(v,2,&ID);
        KeyframeAnimComponent* component = 0;
        GameEntity* entity = GameModules::gameWorld()->entity(ID);
        if( entity && ( component = static_cast<KeyframeAnimComponent*>(entity->component("KeyframeAnimComponent")) ) != 0 )
        {
            retVal = component->getJobID(tChar);
        }
    }
    sq_pushinteger(v,retVal);
    return 1;
}
Exemplo n.º 27
0
_MEMBER_FUNCTION_IMPL(xml, commentNew)
{
    CXML * pXML = sq_getinstance<CXML *>(pVM);

    if(!pXML)
    {
        CLogFile::Print("Failed to get the XML instance.");
        sq_pushbool(pVM, false);
        return 1;
    }

    const char * val;
    sq_getstring(pVM, -1, &val);

    pXML->newComment(val);

    sq_pushbool(pVM, true);
    return 1;

}
Exemplo n.º 28
0
/*
 * open database with given name
 *
 * @param database name
 * @return EMO_NO_ERROR if succeeds
 */
SQInteger emoDatabaseOpen(HSQUIRRELVM v) {
    const SQChar* name;
    SQInteger nargs = sq_gettop(v);
    if (nargs >= 2 && sq_gettype(v, 2) == OT_STRING) {
        sq_tostring(v, 2);
        sq_getstring(v, -1, &name);
        sq_poptop(v);
    } else {
        sq_pushinteger(v, ERR_INVALID_PARAM);
        return 1;
    }

    if (!engine->database->open(name)) {
        sq_pushinteger(v, ERR_DATABASE_OPEN);
        return 1;
    }

    sq_pushinteger(v, EMO_NO_ERROR);
    return 1;
}
Exemplo n.º 29
0
SQInteger SFSpriteCreateTextWrapped(HSQUIRRELVM v)
{
    char *text;
    int fontnum;
    int textR;
    int textG;
    int textB;
    int wrapLength;
    int sprite;
    sq_getstring(Scripts.vm, 2, (const char **)&text);
    sq_getinteger(Scripts.vm, 3, &fontnum);
    sq_getinteger(Scripts.vm, 4, &textR);
    sq_getinteger(Scripts.vm, 5, &textG);
    sq_getinteger(Scripts.vm, 6, &textB);
    sq_getinteger(Scripts.vm, 7, &wrapLength);

    sprite = SpritesCreateText(text, fontnum, textR, textG, textB, wrapLength);
    sq_pushinteger(Scripts.vm, sprite);
    return 1;
}
Exemplo n.º 30
0
_MEMBER_FUNCTION_IMPL(xml, nodeSetContent)
{
    CXML * pXML = sq_getinstance<CXML *>(pVM);

    if(!pXML)
    {
        CLogFile::Print("Failed to get the XML instance.");
        sq_pushbool(pVM, false);
        return 1;
    }

    const char * content;
    sq_getstring(pVM, -1, &content);

    pXML->nodeSetContent(content);

    sq_pushbool(pVM, true);
    return 1;

}