중대 문제 발생!
G12 업데이트 이후로 마비노기 랜덤 함수가 변경되면서, 이 라이브러리는 정확한 정보를 보여주지 못합니다.
마비노기 날씨 도우미
안녕하세요. 마비노기가 뭔가요? 먹는건가요? 우적우적 상태가 되어있는 월망초입니다.
(G11 해보고 싶은데 접속도 할 수 없는 현실에 절망중)
별 도움이 되는건 아니지만, 날씨 예보를 없애기 전에 A/S하러 들렀습니다.
신경 안써도 자동으로 유지되긴 하지만, 언제까지고 업데이트 서버를 운영할 수 있을지 의문스러운 상황이라서요.
그래서 독립 프로그램으로 날씨 정보를 확인할 수 있게 만들었습니다.
실행 프로그램

지역과 날짜를 맞추면 자동으로 해당하는 날짜의 날씨 정보가 나옵니다. 끝.
라이센스
src에는 실행 프로그램의 소스가 들어있습니다. (Visual C# 2008 Express Edition으로 작성)
이 프로그램은 자유롭게 수정 및 배포할 수 있습니다. (즉, 맘대로 뜯어 고치고 지지고 볶아도 됩니다)
사용에 따른 모든 문제에 대해서는 일절 책임지지 않습니다.
다운로드
zip 파일의 압축을 풀고, xml 파일을 넣고 실행하면 됩니다. .Net framework 2.0이 필요합니다.
날씨 라이브러리
프로그래밍 관련 내용입니다. 관심 없는 분은 무시하셔도 됩니다-
라이센스
자유롭게 이용할 수 있으나, 상업적인 이용은 금합니다. 사용에 따른 모든 문제는 책임지지 않습니다.
(lib 디렉토리 내부 파일, MabiRandom.dll, MabiWeather.dll, MabiWeatherCLR.dll 파일에 적용됩니다)
API
lib/MabiWeather.h(아래)를 참고하세요. CLR 이용시는 MabiWeatherCLR::CMabiWeatherWrap 래퍼를 사용하면 됩니다.
lib/MabiWeather.h
#ifdef MABIWEATHER_EXPORTS
#define MABIWEATHER_API __declspec(dllexport)
#else
#define MABIWEATHER_API __declspec(dllimport)
#endif
#include <ctime>
class MABIWEATHER_API CMabiWeather
{
public:
/* 날씨상수 - 맑음, 흐림, 비, 천둥번개 */
enum EWeatherType { EWT_CLEAR, EWT_CLOUD, EWT_RAIN, EWT_STORM };
/* ctor - region은 지역 번호 (현재 1~12) */
CMabiWeather(int region);
/* dtor */
virtual ~CMabiWeather();
/* 날씨값 가져오기. time은 unix timestamp. 반환값은 0.0f ~ 2.0f */
float getWeather(time_t time);
/* 날씨값에 따른 날씨 확인 */
static EWeatherType getType(const float weather);
/* 비오는 양 확인. 반환값은 0.0f ~ 1.0f */
static float getRainAmount(float weather);
private:
/* 프로퍼티 */
time_t _baseTime;
float* _data;
};
예제
C# 예제는 src에 있는 프로그램을 참고하세요.
C++ 예제 (테스트 안해보고 글 쓰면서 대충 친거라 작동 안될수도 있음)
#include <iostream>
#include <ctime>
#include "MabiWeather.h"
using namespace std;
int main()
{
CMabiWeather mw(1); // 지역1 정보 로딩
float weather = mw.getWeather(time(NULL)); // 현재 시간의 날씨값을 가져옴.
// 특정 시간의 데이터를 얻고 싶을땐 C 표준 함수 mktime() 이용.
switch (mw.getType(weather)) { // 날씨값에 따른 현재 날씨 확인, 출력
case CMabiWeather::EWT_STORM:
cout << "폭우"; break;
case CMabiWeather::EWT_RAIN:
cout << "비"; break;
case CMabiWeather::EWT_CLOUD:
cout << "흐림"; break;
case CMabiWeather::EWT_CLEAR:
cout << "맑음"; break;
}
cout << mw.getRainAmount(weather) << endl; // 비오는 양 출력. (출력 범위: 0.0f ~ 1.0f)
// 기존 사이트처럼 20단계나 100단계 등으로 나눌때는 이 수치를 적당히 분배.
return 0;
}
의존성
libxml2.dll(MIT license)은 iconv.dll(LGPL), zlib1.dll(zlib license)에 의존합니다. (오픈소스)
MabiWeather.dll은 MabiRandom.dll, libxml2.dll에 의존합니다. MabiWeatherCLR.dll은 MabiWeather.dll에 의존합니다.
FreeBSD에서 만들어놓고 윈도우로 옮긴거다보니 dll 의존성이 좀 복잡한데, 다 때려넣고 쓰면 됩니다.
마무리
UI 디자인 같은건 전문이 아니다보니 언제나 대충대충. 예쁘게 고칠 분 있으면 좋겠네요.
실행 프로그램은 샘플 수준에 가까운거니, 중요한건 라이브러리. 나중에 시간 나면 MabiWeather.dll 소스도 정리해서 공개할 지도 모르겠습니다. |