Перейти к содержанию

systemspirit

Очередь
  • Постов

    6
  • Зарегистрирован

  • Посещение

Весь контент systemspirit

  1. md->class_ , а дальше как? пробовал md->class_->ID; md->class_.id; и тп моя проблема в том что саму структуру пока увидеть не получается или md->class_ и есть id?
  2. не подскажете как обозначить условие на id моба дабы не зависеть от уровня моба? ревизия eathena 15269 к примеру диапазон id особых монстров 6000-10000 if(/*id моба*/ > 5999 & /*id моба*/ < 10001) много копался в mob_data, но так и не понял как вытащить id или name в функции mob_spawn один кусок привлек внимание, но как им пользоваться не получается понять struct mob_db *db; //For quick data access (saves doing mob_db(md->class_) all the time) [Skotlex]
  3. спасибо большое, всё отлично работает. 1. есть возможность описать ваши действия? каким софтом пользовались, что именно искали, ибо никогда не пользовался хексом в ситуациях подобной этой. 2. почему именно 0xA4 а не скажем 0xb4?
  4. http://tempfile.ru/file/3165913 http://khiel.ru/download/felexe.exe
  5. Добрый день. Прошу помочь или направить на решение. Использую версию 15269, исходники брал отсюда https://eathena-project.googlecode.com/svn/trunk/ В качестве клиента пользую exe с 9 packetversion. Появилась необходимость модифицировать скилл аколита Warp Portal: - Поднять его до 10 уровня. - Увеличить количество memo поинтов до 9 (+1 сейв) Что сделал: db/skill_db.txt 27,9,6,2,0,0x1,0,10,1,yes,0,0,3,magic,0, AL_WARP,Warp Portal src/map/skill.c - эту часть заговнокодил тк ничего не получалось, позже приведу в порядок case AL_WARP: if(sd) { short wp0=0; if(sd->status.memo_point[0].map) { wp0=sd->status.memo_point[0].map; } short wp1=0; if(sd->status.memo_point[1].map) { wp1=sd->status.memo_point[1].map; } short wp2=0; if(sd->status.memo_point[2].map) { wp2=sd->status.memo_point[2].map; } short wp3=0; if(sd->status.memo_point[3].map) { wp3=sd->status.memo_point[3].map; } short wp4=0; if(sd->status.memo_point[4].map) { wp4=sd->status.memo_point[4].map; } short wp5=0; if(sd->status.memo_point[5].map) { wp5=sd->status.memo_point[5].map; } short wp6=0; if(sd->status.memo_point[6].map) { wp6=sd->status.memo_point[6].map; } short wp7=0; if(sd->status.memo_point[7].map) { wp7=sd->status.memo_point[7].map; } short wp8=0; if(sd->status.memo_point[8].map) { wp8=sd->status.memo_point[8].map; } short wp9=0; if(sd->status.memo_point[9].map) { wp9=sd->status.memo_point[9].map; } clif_skill_warppoint(sd, skillid, skilllv, wp0, wp1, wp2, wp3, wp4, wp5, wp6, wp7, wp8, wp9); } src/map/clif.h void clif_skill_warppoint(struct map_session_data* sd, short skill_num, short skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4, unsigned short map5, unsigned short map6, unsigned short map7, unsigned short map8, unsigned short map9, unsigned short map10); src/common/mmo.h #define MAX_MEMOPOINTS 9 src/map/clif.c - и вот тут никак не могу разобраться, WFIFOP расставил все по длине в 16, а все равно когда используешь скилл, выходит окно только с 4 точками memo и никак более, в чем может быть проблема? в базе благополучно находятся все 9 memopoint, и такое ощущение что до клиента доходят только 4 первые строки void clif_skill_warppoint(struct map_session_data* sd, short skill_num, short skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4, unsigned short map5, unsigned short map6, unsigned short map7, unsigned short map8, unsigned short map9, unsigned short map10) { int fd; nullpo_retv(sd); fd = sd->fd; //0x11c WFIFOHEAD(fd,packet_len(0x11c)); WFIFOW(fd,0) = 0x11c; WFIFOW(fd,2) = skill_num; memset(WFIFOP(fd,4), 0x00, 4*MAP_NAME_LENGTH_EXT); if (map1 == (unsigned short)-1) strcpy((char*)WFIFOP(fd,4), "Random"); else // normal map name if (map1 > 0) mapindex_getmapname_ext(mapindex_id2name(map1), (char*)WFIFOP(fd,4)); if (map2 > 0) mapindex_getmapname_ext(mapindex_id2name(map2), (char*)WFIFOP(fd,20)); if (map3 > 0) mapindex_getmapname_ext(mapindex_id2name(map3), (char*)WFIFOP(fd,36)); if (map4 > 0) mapindex_getmapname_ext(mapindex_id2name(map4), (char*)WFIFOP(fd,52)); if (map5 > 0) mapindex_getmapname_ext(mapindex_id2name(map5), (char*)WFIFOP(fd,68)); if (map6 > 0) mapindex_getmapname_ext(mapindex_id2name(map6), (char*)WFIFOP(fd,84)); if (map7 > 0) mapindex_getmapname_ext(mapindex_id2name(map7), (char*)WFIFOP(fd,100)); if (map8 > 0) mapindex_getmapname_ext(mapindex_id2name(map8), (char*)WFIFOP(fd,116)); if (map9 > 0) mapindex_getmapname_ext(mapindex_id2name(map9), (char*)WFIFOP(fd,132)); if (map10 > 0) mapindex_getmapname_ext(mapindex_id2name(map10), (char*)WFIFOP(fd,148)); WFIFOSET(fd,packet_len(0x11c)); sd->menuskill_id = skill_num; if (skill_num == AL_WARP) sd->menuskill_val = (sd->ud.skillx<<16)|sd->ud.skilly; //Store warp position here. else sd->menuskill_val = skill_lv; }
×
×
  • Создать...
Яндекс.Метрика