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

Помогите реализовать скрипт.


b72g

Рекомендуемые сообщения

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;

}

Заранее спасибо :)

Изменено пользователем b72g
Ссылка на комментарий
Поделиться на другие сайты

Насчет меню: я в свое время делал как-то так (кафрашоп чтоли там был):

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. Грёбаный интерет экспорер. Не дружит нихрена с этим редктором. Буквы печатаются через раз

Ссылка на комментарий
Поделиться на другие сайты

меня опередили)))

а разве не так ?

set .@menu$,.@menu$+getitemname(@hatid[.@j])+":";

иначе двоеточие будет делить одну строчку на две, там где этого не надо.

Изменено пользователем Elmiria
Ссылка на комментарий
Поделиться на другие сайты

я из рабочего скрпта собственного написания взяла, работает, никаких пустых строк

хотя хз. Потом погляжу. Спасибо все равно)

Изменено пользователем Elmiria
Ссылка на комментарий
Поделиться на другие сайты

Значит можно и так. Разницы на практике не видать (:

>> добавить диапазон идов от 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; // Получает выбранный предмет в инвентарь

Ссылка на комментарий
Поделиться на другие сайты

Значит можно и так. Разницы на практике не видать (:

>> добавить диапазон идов от 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;

Изменено пользователем Elmiria
Ссылка на комментарий
Поделиться на другие сайты

set .@choose, select(.@menu$); => вылезет меню [select()]. Результат выбора запишется в переменную [.@choose]

В твоем случае вместо

switch(select(.@menu$)) {

case 1:

set .@j,0;

break;

можно написать

set .@j, select(.@menu$) - 1;

Ссылка на комментарий
Поделиться на другие сайты

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 итем ( как карта )

Изменено пользователем b72g
Ссылка на комментарий
Поделиться на другие сайты

По аналогии. Все идентично жеж

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;

Ссылка на комментарий
Поделиться на другие сайты

просто через мес продолжаем писать наш скрипт с новыми проверками. точно так же или через массив или по второму способу

Ссылка на комментарий
Поделиться на другие сайты

кароче че я мучаю вас) Вот вам мой эпос,который впрочем скоро уменьшится на десяток строк)

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;
}

Есть тут один минус, что нельзя добавить одну и туже вещь в требования дважды (будет косяк)

ПС простите за форматирования (клава залипает, хз как убрать)

Изменено пользователем Elmiria
Ссылка на комментарий
Поделиться на другие сайты

>>Есть тут один минус, что нельзя добавить одну и туже вещь в требования дважды (будет косяк)

В смысле?)

Ссылка на комментарий
Поделиться на другие сайты

проверки сработают при недостаточном количестве итема, который забит в требование к созданию предмета дважды.

Но кто так сделает?)

Изменено пользователем Elmiria
Ссылка на комментарий
Поделиться на другие сайты

Забей) не суть дела, мы тут вообще другому человеку помочь пытаемся XD я просто увидела для себя несколько решений, о которых не знала)

Ссылка на комментарий
Поделиться на другие сайты

Ребят что то я запутался. Может кто поработает со мной в реализации скрипта, у кого есть щас свободное время.

За помощь зачислю немного денег на любой кошелек. Напишите в skype: zavtrak11

Ссылка на комментарий
Поделиться на другие сайты

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;

Где используются эти строки? Зачем они тут?

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Вот попытался сделать, чтобы он выдавал за 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;

}

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика