b72g Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) 1.Вообщем у меня не большая проблема с реализацией скрипта(npc). Вообщем в задумке сделать скрипт, который может считывать определенные иды итемов(которые есть у игрока в инвентаре или на себе) и чтобы они появлялись в меню нпц, после чего игрок выбирает определенный ид ( который тоже считывается при наличии ) и в итоге если все удачно, то в первый итем вставляется второй итем (как карта) P.S Скрипт нужен по причине того, что карты не сортируются в слотах head, в оригинале игры 3 слота head ( голова, глаза, рот ) и карты такие как исила,ванберк и.т.д вставляются в любой слот head. В моем случае итем надевается в рот(3 слот head), И из-за того, что нельзя сделать карту, которая бы вставлялась только в рот(3 слот head) требуется реализовать нпц, который будет добавлять эти итемы в вещь. Я начал писать скрипт, но в связи с тем, что нужно будет добавить более 100 итемов, в которые будут вставляться любые 6 карт очень долго. Поэтому хочу чтобы профессионалы в скриптинге подсказали как вбить иды для распознания(или добавить диапазон идов от 20001 до 20108) и чтобы они появлялись в меню. После выбора опр итема, выбирался итем для вставки в первый итем(который тоже бы считывался при наличии) и после успешной проверки, выдавался первый итем со вставкой во второй. Вот скрипт, который начал писать: пока что добавил 1 итем и 6 вставок для него. Очень прошу помощи для упрощения его. prontera,151,177,5 script Wing Man 115,{ mes "[Wings Man]"; mes "Hello, I can embellish your wings!"; mes "Please choose your wings."; next; menu "Wings Of Loyalty",loyalty,"I Don't Have a Wings",LUnfathomable; loyalty: mes "[Wings Man]"; mes "Please choose your stone!"; next; menu "Strong Wings Stone",str,"Fast Wings Stone",agi,"Clever Wings Stone",int,"Hardy Wings Stone",vit,"Accurate Wings Stone",dex,"Lucky Wings Stone",luk,"I Don't Have a Stone",LUnfathomable; str: mes "[Wings Man]"; if(countitem(20001) < 1 || countitem(1991) < 1 || Zeny < 0) goto LNotEnough; delitem 20001,1; delitem 1991,1; set Zeny,Zeny-0; mes "Have a nice day!"; atcommand "@item2 20001 1 1 0 0 1991 0 0 0"; mes ". . . . ."; mes "Enjoy being God of Rune Midgard!"; close; agi: mes "[Wings Man]"; if(countitem(20001) < 1 || countitem(1992) < 1 || Zeny < 0) goto LNotEnough; delitem 20001,1; delitem 1992,1; set Zeny,Zeny-0; mes "Have a nice day!"; atcommand "@item2 20001 1 1 0 0 1992 0 0 0"; mes ". . . . ."; mes "Enjoy being God of Rune Midgard!"; close; int: mes "[Wings Man]"; if(countitem(20001) < 1 || countitem(1993) < 1 || Zeny < 0) goto LNotEnough; delitem 20001,1; delitem 1993,1; set Zeny,Zeny-0; mes "Have a nice day!"; atcommand "@item2 20001 1 1 0 0 1993 0 0 0"; mes ". . . . ."; mes "Enjoy being God of Rune Midgard!"; close; vit: mes "[Wings Man]"; if(countitem(20001) < 1 || countitem(1994) < 1 || Zeny < 0) goto LNotEnough; delitem 20001,1; delitem 1994,1; set Zeny,Zeny-0; mes "Have a nice day!"; atcommand "@item2 20001 1 1 0 0 1994 0 0 0"; mes ". . . . ."; mes "Enjoy being God of Rune Midgard!"; close; dex: mes "[Wings Man]"; if(countitem(20001) < 1 || countitem(1995) < 1 || Zeny < 0) goto LNotEnough; delitem 20001,1; delitem 1995,1; set Zeny,Zeny-0; mes "Have a nice day!"; atcommand "@item2 20001 1 1 0 0 1995 0 0 0"; mes ". . . . ."; mes "Enjoy being God of Rune Midgard!"; close; luk: mes "[Wings Man]"; if(countitem(20001) < 1 || countitem(1996) < 1 || Zeny < 0) goto LNotEnough; delitem 20001,1; delitem 1996,1; set Zeny,Zeny-0; mes "Have a nice day!"; atcommand "@item2 20001 1 1 0 0 1996 0 0 0"; mes ". . . . ."; mes "Enjoy being God of Rune Midgard!"; close; LNotEnough: mes "Bring me a stone and wings!"; close; LUnfathomable: mes "[Wings Man]"; mes "Sorry. I can't help you."; mes "Have a nice day!"; close; } Заранее спасибо Изменено 25 марта, 2014 пользователем b72g Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 Насчет меню: я в свое время делал как-то так (кафрашоп чтоли там был):setarray .itemids[0], 2001,2002, <нужные ID> , 20127;set .@menu$, getitemname(.itemids[0]);for(set .@i, 1; .@i < getarraysize(.itemids); set@i, .@i ) { set .@menu$, .@menu$ + ":" + getitemname(.itemids[.@i]);}set .@chosen_item, select(.@menu$) - 1;p.s. У массивов есть ограничение - 127 элементов. Не стоит об этом забыватьp.p.s. Грёбаный интерет экспорер. Не дружит нихрена с этим редктором. Буквы печатаются через раз Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) меня опередили)))а разве не так ?set .@menu$,.@menu$+getitemname(@hatid[.@j])+":";иначе двоеточие будет делить одну строчку на две, там где этого не надо. Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 Если мне память не изменяет - в таком случае у тебя в меню будет одна пустая последняя строчка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) я из рабочего скрпта собственного написания взяла, работает, никаких пустых строкхотя хз. Потом погляжу. Спасибо все равно) Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 Значит можно и так. Разницы на практике не видать (:>> добавить диапазон идов от 20001 до 20108Если айди все идут таким образом, один за другим, то можно сделать не универсальным способом (перечислением все ID), а другимset .baseid, 20000;set .countids, 108; // Количество вещейfor (set .@i, 1; .@i <= .countids; set .@i, .@i + 1) { set .@menu$, getitemname(.baseid + .@i) + ":";}set .@choose, select(.@menu$);getitem .@choose + .baseid, 1; // Получает выбранный предмет в инвентарь Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) Значит можно и так. Разницы на практике не видать (:>> добавить диапазон идов от 20001 до 20108Если айди все идут таким образом, один за другим, то можно сделать не универсальным способом (перечислением все ID), а другимset .baseid, 20000;set .countids, 108; // Количество вещейfor (set .@i, 1; .@i <= .countids; set .@i, .@i + 1) { set .@menu$, getitemname(.baseid + .@i) + ":";}set .@choose, select(.@menu$);getitem .@choose + .baseid, 1; // Получает выбранный предмет в инвентарьменю не забыл? set .@menu$, .@menu$+getitemname(.baseid + .@i) + ":";set .@choose, select(.@menu$); а в этом случае тоже будет меню с выбором?я сделала через свитч и пришлось все кейсы переписыватьswitch(select(.@menu$)) {case 1:set .@j,0;break; Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 set .@choose, select(.@menu$); => вылезет меню [select()]. Результат выбора запишется в переменную [.@choose]В твоем случае вместо switch(select(.@menu$)) { case 1: set .@j,0; break; можно написатьset .@j, select(.@menu$) - 1; Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) а минус 1 зачем? А, понял, дурак) Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
b72g Опубликовано 25 марта, 2014 Автор Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) set .baseid, 20000;set .countids, 108; // Количество вещейfor (set .@i, 1; .@i <= .countids; set .@i, .@i + 1) { set .@menu$, .@menu$+getitemname(.baseid + .@i) + ":";}set .@choose, select(.@menu$);getitem .@choose + .baseid, 1; // Получает выбранный предмет в инвентарьСпасибо!В меню добавились все названия итемов!Только вопрос как сделать, чтобы после выбора орп.итема, появлялось меню с итемами, которые бы вставлялись в 1 итем ( как карта ) Изменено 25 марта, 2014 пользователем b72g Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 По аналогии. Все идентично жежset .insertids[0], 4001, 4002, 4003, ... , 4100;for (set .@i, 0; .@i <= getarraysize(.insertids); set .@i, .@i + 1) { set .@menu$, .@menu$+getitemname(.insertids[.@i]) + ":";}set .@insert, select(.@menu$) - 1; Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 просто через мес продолжаем писать наш скрипт с новыми проверками. точно так же или через массив или по второму способу Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 Через мес? Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) кароче че я мучаю вас) Вот вам мой эпос,который впрочем скоро уменьшится на десяток строк)pron_mall,104,76,4 script Костюмер#1 864,{//Настройка. При добавлении большего количества предметов, не забывать добавлять case'ы.setarray @hatid[0],5776,5561,5117,5786,5401,5068,5006,5358,5288,5536,5412,5391,18505,5596;setarray @loot01id[0],7711,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot01cnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot02id[0],7711,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot02cnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot03id[0],7711,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot03cnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @customvar$[0],"1","2","3","4","5","6","7","8","9","10","11","12","13","14";setarray @customvarcnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;for(set .@j,0; .@j<getarraysize(@hatid) ; set .@j,.@j+1 ){set .@menu$,.@menu$+getitemname(@hatid[.@j])+":";}mes "[Костюмер]";mes "Посмотри на мои шапочки!";mes "Они не дают бонусов, не занимают место обычной шапки, зато очень красивые!";switch(select(.@menu$)) {case 1:set .@j,0;break;case 2:set .@j,1;break;case 3:set .@j,2;break;case 4:set .@j,3;break;case 5:set .@j,4;break;case 6:set .@j,5;break;case 7:set .@j,6;break;case 8:set .@j,7;break;case 9:set .@j,8;break;case 10:set .@j,9;break;case 11:set .@j,10;break;case 12:set .@j,11;break;case 13:set .@j,12;break;case 14:set .@j,13;break;}//default: ////set .@j,1;mes "[Костюмер]";mes "["+getitemname(@hatid[.@j])+"]";mes "Для этой костюмной шапочки необходимо:";mes " "+getitemname(@loot01id[.@j])+" "+@loot01cnt[.@j]+" шт.";mes " "+getitemname(@loot02id[.@j])+" "+@loot02cnt[.@j]+" шт.";mes " "+getitemname(@loot03id[.@j])+" "+@loot03cnt[.@j]+" шт.";next;mes "[Костюмер]";if (select( "Я собрал все необходимое!:Хорошо, я запомнил.") != 1) {mes "Приходи, когда захочешь."; close;}if(countitem(@loot01id[.@j]) < @loot01cnt[.@j] || countitem(@loot02id[.@j]) < @loot02cnt[.@j] || countitem(@loot03id[.@j]) < @loot03cnt[.@j]) {mes "У тебя нет достаточного количества вещей, чтобы получить шапочку. Возвращайся, когда соберешь все.";close;}mes "[Костюмер]";mes "Одну секунду...";delitem @loot01id[.@j],@loot01cnt[.@j];delitem @loot02id[.@j],@loot02cnt[.@j];delitem @loot03id[.@j],@loot03cnt[.@j]; atcommand "@costumeitem"+" "+ @hatid[.@j];next;mes "[Костюмер]";mes "Вуаля!";mes "Носи с удовольствием!";close; }Есть тут один минус, что нельзя добавить одну и туже вещь в требования дважды (будет косяк)ПС простите за форматирования (клава залипает, хз как убрать) Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 >>Есть тут один минус, что нельзя добавить одну и туже вещь в требования дважды (будет косяк) В смысле?) Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) проверки сработают при недостаточном количестве итема, который забит в требование к созданию предмета дважды.Но кто так сделает?) Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 Все равно не понимаю о чем ты) Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 Забей) не суть дела, мы тут вообще другому человеку помочь пытаемся XD я просто увидела для себя несколько решений, о которых не знала) Ссылка на комментарий Поделиться на другие сайты Поделиться
b72g Опубликовано 25 марта, 2014 Автор Жалоба Поделиться Опубликовано 25 марта, 2014 Ребят что то я запутался. Может кто поработает со мной в реализации скрипта, у кого есть щас свободное время.За помощь зачислю немного денег на любой кошелек. Напишите в skype: zavtrak11 Ссылка на комментарий Поделиться на другие сайты Поделиться
botka4aet Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 setarray @customvar$[0],"1","2","3","4","5","6","7","8","9","10","11","12","13","14";setarray @customvarcnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;Где используются эти строки? Зачем они тут? Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 это на будущее, если я решу добавить переменные типа зеней, кэшшопа или какие либо другие Ссылка на комментарий Поделиться на другие сайты Поделиться
b72g Опубликовано 25 марта, 2014 Автор Жалоба Поделиться Опубликовано 25 марта, 2014 atcommand "@item2"+" "+ @hatid[.@j];Как можно в это значение присобачить 1 1 0 1 1991 0 0 0чтобы в итоге было @item2 hatid 1 1 0 1 1991 0 0 0И как можно сделать таблицу stoneid, чтобы туда входили значения 1991,1992,1993,1994,1995,1996Чтобы cделать:@item2 hatid 1 1 0 1 stoneid 0 0 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Elmiria Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 (изменено) atcommand "@item2"+" "+@hatid[.@j]"+" 1 1 0 0 "+@stoneid[.@i]"+" "+0 0 0"; Изменено 25 марта, 2014 пользователем Elmiria Ссылка на комментарий Поделиться на другие сайты Поделиться
botka4aet Опубликовано 25 марта, 2014 Жалоба Поделиться Опубликовано 25 марта, 2014 atcommand "@item2"+" "+@hatid[.@j] 1 1 0 0"+" "+@stoneid[.@i]"+" "+0 0 0";Внимательнее надо быть. Ссылка на комментарий Поделиться на другие сайты Поделиться
b72g Опубликовано 25 марта, 2014 Автор Жалоба Поделиться Опубликовано 25 марта, 2014 Вот попытался сделать, чтобы он выдавал за 3 стоуна, крылья со стоуном внутри, но нпц просто пропало..//Настройка. При добавлении большего количества предметов, не забывать добавлять case'ы.setarray @hatid[0],20001,20002,20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014;setarray @stoneid[0],1991,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991;setarray @loot01id[0],1991,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot01cnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot02id[0],1991,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot02cnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot03id[0],1991,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @loot03cnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;setarray @customvar$[0],"1","2","3","4","5","6","7","8","9","10","11","12","13","14";setarray @customvarcnt[0],1,2,3,4,5,6,7,8,9,10,11,12,13,14;for(set .@j,0; .@j<getarraysize(@hatid) ; set .@j,.@j+1 ){set .@menu$,.@menu$+getitemname(@hatid[.@j])+":";}for(set .@i,0; .@i<getarraysize(@stoneid) ; set .@i,.@i+1 ){set .@menu$,.@menu$+getitemname(@stoneid[.@i])+":";}mes "[Костюмер]";mes "Посмотри на мои шапочки!";mes "Они не дают бонусов, не занимают место обычной шапки, зато очень красивые!";switch(select(.@menu$)) {case 1:set .@j,0;next;set .@i,0;break;case 2:set .@j,1;next;set .@i,1;break;case 3:set .@j,2;next;set .@i,2;break;case 4:set .@j,3;next;set .@i,3;break;case 5:set .@j,4;next;set .@i,4;break;case 6:set .@j,5;next;set .@i,5;break;case 7:set .@j,6;next;set .@i,6;break;case 8:set .@j,7;next;set .@i,7;break;case 9:set .@j,8;next;set .@i,8;break;case 10:set .@j,9;next;set .@i,9;break;case 11:set .@j,10;next;set .@i,10;break;case 12:set .@j,11;next;set .@i,11;break;case 13:set .@j,12;next;set .@i,12;break;case 14:set .@j,13;next;set .@i,13;break;}//default: ////set .@j,1;mes "[Костюмер]";mes "["+getitemname(@hatid[.@j])+"]";mes "["+getitemname(@stoneid[.@i])+"]";mes "Для этой костюмной шапочки необходимо:";mes " "+getitemname(@loot01id[.@j])+" "+@loot01cnt[.@j]+" шт.";mes " "+getitemname(@loot02id[.@j])+" "+@loot02cnt[.@j]+" шт.";mes " "+getitemname(@loot03id[.@j])+" "+@loot03cnt[.@j]+" шт.";next;mes "[Костюмер]";if (select( "Я собрал все необходимое!:Хорошо, я запомнил.") != 1) {mes "Приходи, когда захочешь."; close;}if(countitem(@loot01id[.@j]) < @loot01cnt[.@j] || countitem(@loot02id[.@j]) < @loot02cnt[.@j] || countitem(@loot03id[.@j]) < @loot03cnt[.@j]) {mes "У тебя нет достаточного количества вещей, чтобы получить шапочку. Возвращайся, когда соберешь все.";close;}mes "[Костюмер]";mes "Одну секунду...";delitem @loot01id[.@j],@loot01cnt[.@j];delitem @loot02id[.@j],@loot02cnt[.@j];delitem @loot03id[.@j],@loot03cnt[.@j];atcommand "@item2"+" "+@hatid[.@j] 1 1 0 0"+" "+@stoneid[.@i]"+" "+0 0 0"; next;mes "[Костюмер]";mes "Вуаля!";mes "Носи с удовольствием!";close;} Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения