Kubix! Опубликовано 12 апреля, 2015 Жалоба Поделиться Опубликовано 12 апреля, 2015 (изменено) В общем, проблема такая.Кусок кода:instance_enter("Hell of Bossnia", 131, 118);sleep 300;warpparty "bossnia_01", 131,118,.PartyID;instance_db:13,Hell of Bossnia,1200,bossnia_01,131,118,bossnia_01Тот, кто первый варпается через instance_enter попадает в alb_ship (так пишет когда нажимаешь alt+z)Хотя находится он на локации bossnia_01. Но никого не видит. И его не видно.Есть идеи, что это? И как пофиксить?Если использовать без Instance_enter, тогда все нормально. Но в табличке инстансов пишет что он будет удален, если не войти через 5 минут.rAthena 17719 Изменено 12 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 12 апреля, 2015 Жалоба Поделиться Опубликовано 12 апреля, 2015 (изменено) В ../src/map/instance.c функция instance_mapname2mapid переписывает название карты в вид ("%d#%s", instance_id, iname) - в вашем случае "13#bossnia_01" так как не может найти символ @ в названии карты. В следствии чего, функция pc_setpos не может найти mapindex карты 13#bossnia_01 и отсылает вас на 1 в списке, а это у нас alb_ship Либо создаем копии карт bossnia_01 вида 1@bossnia_01, либо 13#bossnia_01, либо меняем эту строку : snprintf(alt_name, sizeof(alt_name),"%d#%s", instance_id, iname); на snprintf(alt_name, sizeof(alt_name),"%s", iname); Изменено 12 апреля, 2015 пользователем Nurkz 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 13 апреля, 2015 Автор Жалоба Поделиться Опубликовано 13 апреля, 2015 (изменено) instance.c: In function 'instance_mapname2mapid':instance.c:389:5: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'int' [-Wformat]instance.c:389:5: warning: too many arguments for format [-Wformat-extra-args]instance.c:389:5: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'int' [-Wformat]instance.c:389:5: warning: too many arguments for format [-Wformat-extra-args] Не нравится компилятору мои изменения В принципе понимаю что это. Меня больше интересуют другие ворнинги. Чтоб не создавать тему: skill.c: In function 'skill_unitsetting':skill.c:12079:18: warning: array subscript is above array bounds [-Warray-bounds] Вот кусок кода, который там: {struct skill_condition req = skill_get_requirement(sd,skill_id,skill_lv);ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));[b][12079] >> на это ругается[/b] if( req.itemid[i] )req_item = req.itemid[i];if( map_flag_gvg(src->m) || map[src->m].flag.battleground )limit *= 4; // longer trap times in WOE [celest]if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )target = BCT_ALL;} Изменено 13 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 13 апреля, 2015 Автор Жалоба Поделиться Опубликовано 13 апреля, 2015 (изменено) Поменял карту с bossnia_01 на 1@uns. Проблема осталась ): Изменено 13 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 13 апреля, 2015 Жалоба Поделиться Опубликовано 13 апреля, 2015 instance.c: In function 'instance_mapname2mapid':instance.c:389:5: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'int' [-Wformat]instance.c:389:5: warning: too many arguments for format [-Wformat-extra-args]instance.c:389:5: warning: format '%s' expects argument of type 'char *', but argument 4 has type 'int' [-Wformat]instance.c:389:5: warning: too many arguments for format [-Wformat-extra-args] Не нравится компилятору мои изменения В принципе понимаю что это. Меня больше интересуют другие ворнинги. Чтоб не создавать тему: skill.c: In function 'skill_unitsetting':skill.c:12079:18: warning: array subscript is above array bounds [-Warray-bounds] Вот кусок кода, который там: {struct skill_condition req = skill_get_requirement(sd,skill_id,skill_lv);ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));[b][12079] >> на это ругается[/b] if( req.itemid[i] )req_item = req.itemid[i];if( map_flag_gvg(src->m) || map[src->m].flag.battleground )limit *= 4; // longer trap times in WOE [celest]if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )target = BCT_ALL;} насчет instance_mapname2mapid, убери instance_id в передаваемых значениях на строку : snprintf(alt_name, sizeof(alt_name),"%s", instance_id, iname); насчет skill.c у тебя i может вылезти за рамки максимального значения массива if( i < MAX_SKILL_ITEM_REQUIRE && req.itemid[i] ) req_item = req.itemid[i]; Поменял карту с bossnia_01 на 1@uns. Проблема осталась ): В db/map_index.txt и conf/maps_athena.conf добавил? Mapcache пересобирал? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 13 апреля, 2015 Автор Жалоба Поделиться Опубликовано 13 апреля, 2015 (изменено) 1@uns = стандартная локацияА насчет instance_mapname2mapid сейчас проверю, отпишу Изменено 13 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 13 апреля, 2015 Автор Жалоба Поделиться Опубликовано 13 апреля, 2015 (изменено) В общем, все равно варпает в альберту )Мой скрипт для проверки:prontera,141,196,6 script check 100,{if (getcharid(1)) {instance_create("Dragon Nest");getpartymember(getcharid(1),2);set .@partymembercount, $@partymembercount;copyarray .@partymemberaid[0], $@partymemberaid[0], .@partymembercount;for (set .@i, 0; .@i < .@partymembercount; set .@i, .@i + 1) {// Attach party memberif (attachrid(.@partymemberaid[.@i])) {// Check if player is logged in, not vending or chatting (AFK)if (isloggedin(getcharid(3),getcharid(0)) && !checkvending() && !checkchatting() && strcharinfo(3) == strcharinfo(3)) {// Enter instance.@enter = instance_enter("Dragon Nest");if (.@enter != 0) {mes "["+strnpcinfo(1)+"]";switch (.@enter) {case 1: mes "ERROR: Party not found."; break;case 2: mes "ERROR: Party does not have an instance."; break;case 3: mes "ERROR: Unknown error."; break;}mes " ";mes "Instance entry ^FF0000failed^000000.";emotion e_omg;close;}}}}}}http://rghost.ru/8fvxJGtPJ.view Изменено 13 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 13 апреля, 2015 Жалоба Поделиться Опубликовано 13 апреля, 2015 Как вариант :int instance_mapname2mapid(const char *name, short instance_id){ struct instance_data *im; int m = map_mapname2mapid(name); char iname[MAP_NAME_LENGTH]; int i; if(m < 0) { ShowError("instance_mapname2mapid: map name %s does not exist.\n",name); return -1; } strcpy(iname,name); if(instance_id <= 0 || instance_id > MAX_INSTANCE_DATA) return -1; im = &instance_data[instance_id]; if(im->state != INSTANCE_BUSY) return -1; for(i = 0; i < MAX_MAP_PER_INSTANCE; i++) { if(im->map[i].src_m == m) { return map_mapname2mapid(iname); } } return -1;}Попробуй.. Я вообще офигел от того, что они там наворотили с этими инстансами.. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 13 апреля, 2015 Автор Жалоба Поделиться Опубликовано 13 апреля, 2015 (изменено) Как вариант :int instance_mapname2mapid(const char *name, short instance_id){struct instance_data *im;int m = map_mapname2mapid(name);char iname[MAP_NAME_LENGTH];int i;if(m < 0) {ShowError("instance_mapname2mapid: map name %s does not exist.\n",name);return -1;}strcpy(iname,name);if(instance_id <= 0 || instance_id > MAX_INSTANCE_DATA)return -1;im = &instance_data[instance_id];if(im->state != INSTANCE_BUSY)return -1;for(i = 0; i < MAX_MAP_PER_INSTANCE; i++) {if(im->map[i].src_m == m) {return map_mapname2mapid(iname);}}return -1;}Попробуй.. Я вообще офигел от того, что они там наворотили с этими инстансами..Вроде как сработало, спасибо. Это как-то отразиться на стандартных инстах?https://rathena.org/board/topic/84123-r17386-instance-system-rewrite/ вот, если не читал. Изменено 13 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Nurkz Опубликовано 13 апреля, 2015 Жалоба Поделиться Опубликовано 13 апреля, 2015 (изменено) Вроде как сработало, спасибо. Это как-то отразиться на стандартных инстах? https://rathena.org/...system-rewrite/ вот, если не читал. Не думаю что отразится, просто он будет брать mapindex карт из db напрямую, без каких-либо сверок с названием карт (типо есть ли там символ @ и так далее).. Как они пишут : While the client restricts map names to 8 characters in the [number]@[name] format, the server is able to send a false name to the clients, allowing any map to be instanced. Но судя по всему, старые клиенты плохо принимают false name Изменено 13 апреля, 2015 пользователем Nurkz 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения