-
Постов
6 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные systemspirit
-
-
Дальше находим:
if(md->db->option)
// Added for carts, falcons and pecos for cloned monsters. [Valaris]
md->sc.option = md->db->option;не подскажете как обозначить условие на 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]
-
спасибо большое
-
спасибо большое, всё отлично работает.
1. есть возможность описать ваши действия? каким софтом пользовались, что именно искали, ибо никогда не пользовался хексом в ситуациях подобной этой.
2. почему именно 0xA4 а не скажем 0xb4?
-
http://tempfile.ru/file/3165913
http://khiel.ru/download/felexe.exe -
Добрый день. Прошу помочь или направить на решение.
Использую версию 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 Portalsrc/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;
}
[src] Демонические монстры (обновлено 2015.09.4)
в Модификации
Опубликовано · Изменено пользователем systemspirit
md->class_ , а дальше как?
пробовал md->class_->ID; md->class_.id; и тп
моя проблема в том что саму структуру пока увидеть не получается
или md->class_ и есть id?