/** * @brief Checks to see if a time is larger or equal to another. * * @usage if time.create( 630, 5, 78) <= time.get() then -- do something if time is past UST 630:0005.78 * * @luatparam Time t1 Time to see if is is smaller or equal to than t2. * @luatparam Time t2 Time see if is larger or equal to than t1. * @luatreturn boolean true if t1 <= t2 * @luafunc __le( t1, t2 ) */ static int time_le( lua_State *L ) { ntime_t t1, t2; t1 = luaL_validtime( L, 1 ); t2 = luaL_validtime( L, 2 ); lua_pushboolean( L, t1<=t2 ); return 1; }
/** * @brief Subtracts two time metatables. * * Overrides the subtraction operator. * * @usage new_time = time.get() - time.create( 0, 3, 0 ) -- Subtracts 3 STP to the current date * * @luatparam Time t1 Time metatable to subtract from. * @luatparam Time t2 Time metatable subtracted. * @luafunc sub( t1, t2) */ static int time_sub( lua_State *L ) { ntime_t t1, t2; /* Parameters. */ t1 = luaL_validtime( L, 1 ); t2 = luaL_validtime( L, 2 ); /* Sub them. */ lua_pushtime( L, t1 - t2 ); return 1; }
/** * @brief Adds two time metatables. * * Overrides the addition operator. * * @usage new_time = time.get() + time.create( 0, 5, 0 ) -- Adds 5 STP to the current date * * @luatparam Time t1 Time metatable to add to. * @luatparam Time t2 Time metatable added. * @luafunc add( t1, t2) */ static int time_add( lua_State *L ) { ntime_t t1, t2; /* Parameters. */ t1 = luaL_validtime( L, 1 ); t2 = luaL_validtime( L, 2 ); /* Add them. */ lua_pushtime( L, t1 + t2 ); return 1; }
/** * @brief Hooks a date change with custom resolution. * * The hook receives only the optional argument. * * @usage hook.date( time.create( 0, 0, 1000 ), "some_func", nil ) -- Hooks with a 1000 STU resolution * * @luaparam resolution Resolution of the timer (should be a time structure). * @luaparam funcname Name of function to run when hook is triggered. * @luaparam arg Argument to pass to hook. * @luareturn Hook identifier. * @luafunc date( resolution, funcname, arg ) */ static int hook_date( lua_State *L ) { unsigned int h; ntime_t t; t = luaL_validtime( L, 1 ); h = hook_generic( L, NULL, 0., 2, t ); lua_pushnumber( L, h ); return 1; }
/* * Method version of time_sub that modifies the first time. */ static int time_sub__( lua_State *L ) { ntime_t *t1, t2; /* Parameters. */ t1 = luaL_checktime( L, 1 ); t2 = luaL_validtime( L, 2 ); /* Sub them. */ *t1 -= t2; lua_pushtime( L, *t1 ); return 1; }
/** * @brief Converts the time to a pretty human readable format. * * @usage strt = time.str() -- Gets current time * @uasge strt = time.str( nil, 5 ) -- Gets current time with full decimals * @usage strt = time.str( time.get() + time.create(0,5,0) ) -- Gets time in 5 STP * @usage strt = t:str() -- Gets the string of t * * @luatparam Time t Time to convert to pretty format. If omitted, current time is used. * @luatparam[opt=2] number d Decimals to use for displaying STU (should be between 0 and 5). * @luatreturn string The time in human readable format. * @luafunc str( t, d ) */ static int time_str( lua_State *L ) { int top; ntime_t t; char nt[64]; int d; /* Defaults. */ d = 2; /* Parse parameters. */ top = lua_gettop(L); if ((top > 0) && !lua_isnil(L,1)) t = luaL_validtime(L,1); else t = ntime_get(); if (top > 1) d = luaL_checkint(L,2); /* Push string. */ ntime_prettyBuf( nt, sizeof(nt), t, d ); lua_pushstring(L, nt); return 1; }
/** * @brief Gets a number representing this time. * * The best usage for this currently is mission variables. * * @usage num = t:tonumber() -- Getting the number from a time t * * @luatparam Time t Time to get number of. * @luatreturn number Number representing time. * @luafunc tonumber( t ) */ static int time_tonumber( lua_State *L ) { ntime_t t = luaL_validtime(L,1); lua_pushnumber( L, t ); return 1; }
/** * @brief Increases or decreases the time. * * @usage time.inc( time.create(0,0,100) ) -- Increments the time by 100 STU. * * @luatparam Time t Amount to increment or decrement the time by. * @luafunc inc( t ) */ static int time_inc( lua_State *L ) { ntime_inc( luaL_validtime(L,1) ); return 0; }
/** * @brief Adds an article. * @usage news.add(faction,title,body,[date_to_rm, [date]]) * * @usage s = news.add( "Empire", "Hello world!", "The Empire wishes to say hello!", 0 ) -- Adds an Empire specific article, with date 0. * * @luaparam faction faction of the article, "Generic" for non-factional * @luaparam title Title of the article * @luaparam content What's in the article * @luaparam date_to_rm date to remove the article * @luaparam date What time to put, defaults to current date, use 0 to not use a date * @luareturn The article matching name or nil if error. * @luafunc add( s ) */ int newsL_add( lua_State *L ) { news_t *n_article; char *title, *content, *faction; ntime_t date, date_to_rm; title = NULL; content = NULL; faction = NULL; date = ntime_get(); date_to_rm = 50000000000000; /* If a table is passed in. ugly hack */ if (lua_istable(L, 1)) { lua_pushnil(L); /* traverse table */ while (lua_next(L, -2)) { /* traverse sub table */ if (lua_istable(L, -1)) { lua_pushnil(L); while (lua_next(L, -2)) { if (lua_isnumber(L, -1)) { if (date_to_rm) date_to_rm = lua_tonumber(L, -1); else date = lua_tonumber(L, -1); } else if (lua_istime(L, -1)) { if (date_to_rm) date_to_rm = luaL_validtime(L, -1); else date = luaL_validtime(L, -1); } else if (lua_isstring(L, -1)) { if (!faction) faction = strdup(lua_tostring(L, -1)); else if (!title) title = strdup(lua_tostring(L, -1)); else if (!content) content = strdup(lua_tostring(L, -1)); } lua_pop(L, 1); } if (title && content && faction) new_article(title, content, faction, date, date_to_rm); else WARN("Bad arguments"); free(faction); free(title); free(content); faction = NULL; title = NULL; content = NULL; date = ntime_get(); date_to_rm = 50000000000000; } lua_pop(L, 1); } lua_pop(L, 1); /* If we're landed, we should regenerate the news buffer. */ if (landed) { generate_news(faction_name(land_planet->faction)); if (land_loaded) bar_regen(); } return 0; } if (!(lua_isstring(L, 1) && lua_isstring(L, 2) && lua_isstring(L, 3))) { WARN("\nBad arguments, use " "addArticle(\"Faction\",\"Title\",\"Content\",[date,[date_to_rm]])"); return 0; } faction = strdup(lua_tostring(L, 1)); title = strdup(lua_tostring(L, 2)); content = strdup(lua_tostring(L, 3)); /* get date and date to remove, or leave at defaults*/ if (lua_isnumber(L, 4) || lua_istime(L, 4)) { if (lua_istime(L, 4)) date_to_rm = luaL_validtime(L, 4); else date_to_rm = lua_tonumber(L, 4); } if (lua_isnumber(L, 5) || lua_istime(L, 5)) { if (lua_istime(L, 5)) date = luaL_validtime(L, 5); else date = lua_tonumber(L, 5); } if (title && content && faction) n_article = new_article(title, content, faction, date, date_to_rm); else WARN("Bad arguments"); lua_pusharticle(L, n_article->id); free(title); free(content); free(faction); /* If we're landed, we should regenerate the news buffer. */ if (landed) { generate_news(faction_name(land_planet->faction)); if (land_loaded) bar_regen(); } return 1; }