치트엔진 6.2로 만든 어스토니시아 스토리 R 치트.
돈, 무적시간, 각 캐릭터의 능력치를 조절할 수 있다.
[카테고리:] 이전 블로그
태터툴즈, 블로거닷컴, VCL WordPress 등지에서 내보낸 블로그 글들.
-
어스토니시아 스토리 R 치트 시트
-
디아블로3, 여러 스탯 공식들 기록
스탯 계산에 대한 참고자료
참고자료
공격, 방어, 경험치 등:
http://mmo-mechanics.com/swtor/forums/Thread-Diablo-3-formula-list
우리나라에는 주로 DPS 계산기만 있는데, EHP(Effective Health Pool) 계산기도 있다
dps 계산기: http://armadagaming.com/dpscalculator.php
ehp 계산기: http://www.diablofans.com/topic/43712-diablo3-effective-health-pool-calculator/디아블로3 방어스탯 공략
http://milky.alicecompany.co.kr/761게임메카 기사: 디아블로3 저항 시스템, 생존을 위한 필수 요소
http://dia3.gamemeca.com/mecareport.php?gid=22763 -
C-Style Callback 함수와 클래스에 관한 스터디
문제 제기:
C-Style의 콜백 구조는 C++ 프로그래밍에서 큰 문제를 일으킨다. 그 문제는 콜백 함수의 인자로 들어가는 함수 포인터에는 ‘클래스 멤버 함수’는 들어갈 수가 없다는 점이다.
보통 이러한 문제를 해결하기 위해 아예 일반 함수 콜백에 전역변수를 사용하곤 한다. 하지만, 이러한 해결은 많은 결점을 낳는다. 프로그램이 점점 작성될 수록 매우 프로그래밍하기 불편한 구조로 되어 버리기 때문이다.
그 하나의 예로 GLUT를 이용한 프로그래밍을 들 수 있다. GLUT는 매우 사용하기 간결하고 편리하지만, 콜백 함수가 전형적인 ‘C-Style’이라 프로그램에 필요한 데이터가 전역변수로 저장되는 경우가 빈번한데, 이런 형태로 조금만 프로그램이 커져버리면 혼란스러운 전역 변수의 범벅에서 길을 잃어버리는 경우가 허다하다.
진땀을 흘려가며 전역 변수 투성이 코드를 디버깅하며 ‘클래스를 사용할 수 있으면 참 좋을텐데’ 라고 생각해 본 적이 있는가? 그렇다면 ‘클래스 (혹은 구조체)’를 사용하면서도 C-Style의 콜백을 이용하려면 어떻게 해야 할까? 이 포스트는 그러한 방법에 대해 서술하고자 한다.
차례:
01 C-Style Callback
02 Callback and Class
03 Static Variable
04 Data Class and Callback Class
05 Template Callback Class
06 GLUT Application
07 더 다양한 스터디
-
더 다양한 스터디
현재까지 제안된 방법이 최선일까? 앞서 이야기하기도 했지만 절대 그렇지 않을 것이다. 더 다양한 방법이 있을 수 있을 것이다. 본 포스트에는 좀 더 나은 방법에 대해 기록하며, 그 이외의 다양한 이야기를 적어둘 것이다.
콜백함수를 위한 템플릿을 이용한 2개의 클래스를 사용하는 것 보다 괜찮아 보이는 방법 중 하나는 ‘함수 어댑터(function adaptor)’를 사용하는 방법이다(출처).
// binding function 제작 #include <iostream> #include <cstddef> // 콜백 함수 struct demo { void func() { std::cout << "called.n"; } }; template <typename obj, void (obj::*xptr)() > struct func_bind { static obj x; static void call() { (x.*xptr)(); } }; template <typename obj, void (obj::*xptr)(void) > obj func_bind::x; // 전역변수 콜백 함수 포인터. // 어떤 라이브러리 어딘가에 있다고 가정한다. void (*g_callback)(void) = NULL; int main(int argc, char** argv) { // 라이브러리에 우리의 콜백 함수를 등록하는 과정이라고 가정한다. func_bind<demo, &demo::func> bound; g_callback = bound.call; g_callback(); return EXIT_SUCCESS; }
[그 외 이야기들]
함수 어댑터
멤버 함수를 위한 STL 함수 어댑터들이 있다.mem_fun_ref, mem_fun 들이 그것이다.
#include <functional> demo d; // 멤버 변수를 가진 클래스 std::mem_fun_t<void, demo> p = std::mem_fun<void, demo>(&demo::func); std::mem_fun_ref_t<void, demo> r = std::mem_fun_ref<void, demo>(&demo::func); p(&d); // demo::func 멤버 함수 호출 r(d); // 위와 같으나 위는 객체의 포인터, 이것은 객체의 레퍼런스를 인자로 받는다.
선언된 p나 r은 C-Style callback의 인자로는 사용할 수 없다.
[GLUT Wrapper 등]
- G. Stetten 과 K.Crawford는 GLUT의 C++ wrapper 인 GlutMaster를 만들었다. (홈페이지)
- N. Stewart는 OpenGL C++ Toolkit를 공개했다. (홈페이지)
[Function Object]
- mem_fun, mem_fun_ptr 등은 functional 헤더에 정의되어 있다. 이 외에도 STL은 많은 함수 어댑터를 제공한다. 이들을 이용해 함수형 프로그래밍이 가능하다.
- Boost library는 함수형 프로그래밍 뿐 아니라 C++ 프로그래밍에 있어 유용한 많은 기능을 제공한다. Boost에 대해서는 차후 따로 포스팅할 계획이다.