1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. #define
  2. #define
    Китайцы - добрые люди. В каждом (шаровом) билде своего PW сервера оставляют кучу полезной и не совсем дебаг информации. И мы можем ее достать! Если читатель этой темы захочет написать свой собственный и инновационный редактор - будет полезно тут прочитать. Будем мы пользоваться программой GDB (GNU Debugger). Вообще эта программа предназначена для отладки приложений, но мы будем только доставать информацию из таблицы символов исполняемых файлов. 1. Установим GDB (8-12 МБ) apt-get install gdb 2. Откроем GDB gdb 3. Загрузим наш файл геймсервера (gdb) file /server/gamed/gsПоявится: (gdb) Reading symbols from /server/gamed/gs...done. Придется подождать. 3.1 Добавим вывод в файл всего, что выведется на экран (gdb) set logging file /путь к файлу (gdb) set logging on 4. Дальше нам нужно найти тип "elementdataman" (gdb) ptype elementdataman Появится очень много строк, нажимаем Enter до конца вывода. 5. Ищем наш файл из пункта 3.1. Открываем. В этом файле представлен листинг структуры elementsdataman. Находим public часть этого файла. В ней будут упорядочены все листы этого файла. Пример public части elementsdataman(Версия 1.4.6 v80) public: elementdataman(void); ~elementdataman(int); void add_structure(unsigned int, EQUIPMENT_ADDON &); void add_structure(unsigned int, WEAPON_MAJOR_TYPE &); void add_structure(unsigned int, WEAPON_SUB_TYPE &); void add_structure(unsigned int, WEAPON_ESSENCE &); void add_structure(unsigned int, ARMOR_MAJOR_TYPE &); <...> void add_structure(unsigned int, FASHION_WEAPON_CONFIG &); void add_structure(unsigned int, PET_EVOLVE_CONFIG &); void add_structure(unsigned int, PET_EVOLVED_SKILL_CONFIG &); void add_structure(unsigned int, MONEY_CONVERTIBLE_ESSENCE &); void add_structure(unsigned int, STONE_CHANGE_RECIPE_TYPE &); unsigned int get_data_id(ID_SPACE, unsigned int, DATA_TYPE &); unsigned int get_first_data_id(ID_SPACE, DATA_TYPE &); unsigned int get_cur_data_id(ID_SPACE, DATA_TYPE &); unsigned int get_next_data_id(ID_SPACE, DATA_TYPE &); unsigned int get_data_num(ID_SPACE); DATA_TYPE get_data_type(unsigned int, ID_SPACE); const void * get_data_ptr(unsigned int, ID_SPACE, DATA_TYPE &); int save_data(const char *); int load_data(const char *); 6. Из этого всего нам нужно только то, что находится в функциях add_structure(int, listdef) Где listdef - структура листа. Например, listdef EQUIPMENT_ADDON (Самый первый лист доп статов). Они находятся в правильном порядке (как ни странно). 7. Выписываем все listdef по порядку в блокнот: EQUIPMENT_ADDON WEAPON_MAJOR_TYPE ... 8. Снова заходим в GDB И для каждого listdef набираем (gdb) ptype EQUIPMENT_ADDON В выводе будет структура этого листа. Более того, если вы не закрывали GDB, она будет экспортироваться в файлик из п. 3.1. Дальше проделываем для каждого листа (gdb) ptype WEAPON_MAJOR_TYPE - экспортируется структура второго листа И так далее для каждого листа из п.6. 9. Финишная прямая. Теперь напоминаю, что первым восьми байтам файла соответствует структура: short version; - версия файла short hashtag; - точно не знаю. Кажется контрольная сумма. Отпишитесь, кто знает. int timestamp; вспомогательное значение для последнего изменения файла. 10. На последок. Не забудьте также, что перед каждым листом в файле стоит int число с количеством итемов в листе. Вуаля! Соединив все воедино сначала начало файла (п. 9), затем все листы из п.8 мы получим готовую структуру файла elements.data. Гайд написан для mmorpg-devs by DEFiNE. Лицензия: Beerware.
    Автор темы: #define, 26 сен 2013, ответов - 9, в разделе: PW Документация
  3. #define
  4. #define