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

разбор доски эдем


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

 

Скрытый текст

 

moc_para01,48,177,3    script    Миссия [91-99]    4_BOARD3,{
    set $@npcnames$,"^BC7F15[Доска миссий 91-99]^000000";
    if (countitem(Para_Team_Mark) < 1) {
        mes $@npcnames$;
        mes "^4D4DFFПохоже это какая-то специальная";
        mes "доска с перечнем миссий, доступных";
        mes "лишь членам^000000 ^BC7F15Группы Эдем.^000000";
        close;
    }

    if (BaseLevel < 91 || BaseLevel > 99) {
        // Quest IDs: 4181-4196
        // Quest cooldown IDs: 4212-4227 
        mes $@npcnames$;
        setarray .@names$[0],
            "Solider","Freezer","Heater",
            "Injustice","Rybio","Dark Priest",
            "Stapo","Roween","Siroma",
            "Shinobi","Evil Nymph",
            "Deviruchi","Mineral","Kaho","Neraid","Disguise";
        setarray .@exp[0],
            90000,94000,114000,
            96000,96000,146000,
            96000,102000,110000,
            102000,108000,
            110000,138000,118000,96000,134000;
        mes "^4D4DFFДанные списки квестов, доступны";
        mes "только для определённых^000000";
        mes "^BC7F15Базовых Уровней.^000000";
        mes "^4D4DFFПоищи списки для своего ^BC7F15Уровня.^000000";
        for(.@quest = 4181; .@quest<=4196; ++.@quest) {
            .@hunting = questprogress(.@quest,HUNTING);
            if (.@hunting == 1) {
                erasequest .@quest;
            } else if (.@hunting == 2) {
                erasequest .@quest;
                getexp .@exp[.@quest-4181],0;
            }
        }
        close;
    }
    mes $@npcnames$;
    mes "Здесь представлен довольно";
    mes "обширный список заданий на охоту:";
    next;
    switch(select("Черепаший Остров:Гласт Хайм:Рашель:Удалённые места:Другие регионы")) {
    case 1:
        switch(select("Solider:Freezer:Heater")) {
            case 1: callsub L_Quest,4181,"Solider",90000,"^000000","^000000.";
            case 2: callsub L_Quest,4182,"Freezer",94000,"^000000","^000000.";
            case 3: callsub L_Quest,4183,"Heater",114000,"^000000","^000000.";
        }
    case 2:
        switch(select("Injustice:Rybio:Dark Priest")) {
            case 1: callsub L_Quest,4184,"Injustice",96000,"^000000","^000000.";
            case 2: callsub L_Quest,4185,"Rybio",96000,"^000000","^000000.";
            case 3: callsub L_Quest,4186,"Dark Priest",146000,"^000000","^000000.";
        }
    case 3:
        switch(select("Stapo:Roween:Siroma")) {
            case 1: callsub L_Quest,4187,"Stapo",96000,"^000000","^000000.";
            case 2: callsub L_Quest,4188,"Roween",102000,"^000000","^000000.";
            case 3: callsub L_Quest,4189,"Siroma",110000,"^000000","^000000.";
        }
    case 4:
        switch(select("Shinobi:Evil Nymph")) {
            case 1: callsub L_Quest,4190,"Shinobi",102000,"^000000","^000000.";
            case 2: callsub L_Quest,4191,"Evil Nymph",108000,"^000000","^000000.";
        }
    case 5:
        switch(select("Deviruchi:Mineral:Kaho:Neraid:Disguise")) {
            case 1: callsub L_Quest,4192,"Deviruchi",110000,"^000000","^000000.";
            case 2: callsub L_Quest,4193,"Mineral",138000,"^000000","^000000.";
            case 3: callsub L_Quest,4194,"Kaho",118000,"^000000","^000000.";
            case 4: callsub L_Quest,4195,"Neraid",96000,"^000000","^000000.";
            case 5: callsub L_Quest,4196,"Disguise",134000,"^000000","^000000.";
        }
    }
    end;

L_Quest:
    .@quest1 = getarg(0);
    .@quest2 = .@quest1+31;
    .@playtime = questprogress(.@quest2,PLAYTIME);
    if (.@playtime > 0 ) {
        mes $@npcnames$;
        mes "Эту миссию выбрать больше нельзя.";
        mes "Пожалуйста выберите другую миссию.";
        close;
    }
    .@hunting = questprogress(.@quest1,HUNTING);
    if (.@hunting == 1) {
        mes $@npcnames$;
        mes "Нужно убить ^4D4DFF30 "+getarg(1)+".^000000 Ступай заверши дело до конца!";
        close;
    } else if (.@hunting == 2) {
        mes $@npcnames$;
        mes "Необходимо было убить 30 "+getarg(1)+".";
        mes "Спасибо.";
        next;
        mes $@npcnames$;
        mes "Вот тебе небольшой подарочек.";
        mes "В качестве моральной поддержки!";
        erasequest .@quest1;
        if (!.@playtime) setquest .@quest2;
        specialeffect2 EF_TEIHIT3;
        specialeffect2 699;
        specialeffect2 598;
        percentheal 100,100;
        sc_start SC_FOOD_STR, 1800000,10; //30min
        sc_start SC_FOOD_AGI,1200000,10;  //20min
        sc_start SC_FOOD_VIT,1200000,10;  //20min
        sc_start SC_FOOD_INT,1200000,10;  //20min
        sc_start SC_FOOD_DEX,1200000,10;  //20min
        sc_start SC_FOOD_LUK,1200000,10;  //20min
        next;
        mes $@npcnames$;
        mes "Вууххуу! Ну, удачи!";
        setquest .@quest2;

        if (JobLevel > 50 && JobLevel < 56) .@jexp = 67000;
        else if (JobLevel > 55 && JobLevel < 61) .@jexp = 94000;
        else if (JobLevel > 60 && JobLevel < 66) .@jexp = 141000;
        else if (JobLevel > 65 && JobLevel < 69) .@jexp = 212000;
        else if (JobLevel == 69) .@jexp = 311000;

        getexp getarg(2),.@jexp;
        close;
    }
        else if (.@hunting == 2) {
        setquest .@quest2;
        mes $@npcnames$;
        mes "You have re-accepted the "+getarg(1)+" Hunting mission.";
        close;
    }
        else {
        if (getarg(3) != "") getarg(3),3;
        mes $@npcnames$;
        mes "Пожалуйста, убей 30 "+getarg(1)+" и возвращайся сюда.";
        setquest .@quest1;
        if (getarg(3) != "") getarg(3),255;
        close;
//        if(select("I'll hunt them.:No thanks.") == 1) {
            mes $@npcnames$;

            mes "When you have completed the mission, post it on this board and collect your reward.";
            getitem Old_Card_Album,1;  //Old Card Album 
            set .@p, rand(90000,800000);
            set Zeny,Zeny + .@p;
            announce strcharinfo(0) + " и получает " + .@p + " зени",bc_all,"0xD9608B";
            if (!.@playtime) setquest .@quest2;
            setquest .@quest1;
        }
        close;
    }

 

 

 

в данном скрипте отсутствует проверка на то, что у меня уже взята миссия, но доска мне всё же даёт взять другого моба для задания, и получается что я могу взять и моба девиручи и параллельно ещё и кахо, помогите выровнять скрипт! + добавить проверку с мессагой к примеру:

если я взял девиручи и нажимаю на него повторно меня скрипт направляет в

    if (.@hunting == 1) {
        mes $@npcnames$;
        mes "Тебе нужно убить ^4D4DFF30 "+getarg(1)+".^000000 Ступай заверши дело до конца!";
        close;

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

    if (.@hunting == 0) {
        mes $@npcnames$;
        mes "Ты ещё не прошёл прошёл задание ^4D4DFF30 "+getarg(1)+".^000000 Ты не можешь взять следующее пока не пройдёшь!";
        close;

помогите подправить !! и сделать всё по человечьи)) а то бардак получается

спасибо!!

 

так же наткнулся на другую проблему, нужно чтобы за каждый пройденный этап квеста давался предмет, например: 1 квест прошёл, получил 100шт новис потов и 1 купон для открытие кафры, 2 квест прошёл получил 100шт новис потов и 50 вингов на сейв, для такого я воспользовался параметром getrag() прилагаю кусок нпц-шника

geffen,103,42,5    script    Спониак    4W_M_03,{
    set $@npcnames$,"^BC7F15[Клиент Спониак]^000000";
    if (checkweight(Knife,1) == 0 || (MaxWeight - Weight) < 3500) {
        mes $@npcnames$;
        mes "Why are you carrying so many items?";
        mes "Are you in a training course or something?";
        close;
    }
    mes $@npcnames$;
    mes "Лу~ Лу~ Лу~ лу~";
    mes "Лу~ Хах?";
    next;
    mes $@npcnames$;
    mes "О, ты должно быть новичёк, верно?";
    mes "Какая невинная мордашка! Ха~ Хахаха.";
    emotion e_gg;
    next;
    mes $@npcnames$;
    mes "Что же ты бродишь тут бесцельно вместо того, чтобы охотиться на кого-нибудь?";
    next;
    if(select("Как раз ухожу:У меня миссия - Охота") == 1) {
        mes $@npcnames$;
        mes "Ааа-а, ну ступай. Пока-пока~";
        close;
    }
    mes $@npcnames$;
    mes "Ах, так ты должно быть из Группы Эдем? Так что у тебя за миссия, говоришь?";
    next;
    switch(select("Poison Spore:Smokie:Elder Willow:Coco:Thara Frog")) {
        case 1: callsub L_Quest,8266,"Охота - Poison Spore",5000,100,100,15,"^000000.";
        case 2: callsub L_Quest,8267,"Охота - Smokie",5000,100,100,0,50,"^000000.";
        case 3: callsub L_Quest,8268,"Охота - Elder Willow",5000,100,110,0,0,5,"^000000.";
        case 4: callsub L_Quest,8269,"Охота - Coco",5000,200,150,0,0,0,1,"^000000.";
        case 5: callsub L_Quest,8270,"Охота - Thara Frog",4500,300,200,"^000000.";
    }
    end;
L_Quest:
    //QuestID,Quest,BExp,JExp,PotionAmt,Desc
    if (questprogress(getarg(0)) == 1) {
        if (questprogress(getarg(0),HUNTING) == 2) {
            mes $@npcnames$;
            mes getarg(1)+"! Ух ты, не думал что ты выберешь эту миссию. Я уж было руки опустил, но ты делаешь дело. И я это ценю!";
            next;
            mes $@npcnames$;
            mes "Ну что ж, а ты молодец! За мной твоя награда, как и договаривались.";
            next;
            mes $@npcnames$;
            mes "Вот, держи. И спасибо тебе огромное. Да благословит тебя Господь!";
            getitem Novice_Potion,getarg(4);
            getitem Cargo_Free_Ticket,getarg(5);
            getitem Wing_Of_Butterfly,getarg(6,-2);
            getitem Warp_Free_Ticket,getarg(7,-3);
            getitem WOB_Rune,getarg(8,-4);
            getexp getarg(2),getarg(3);
            erasequest getarg(0);
            close;
        }

а беда в том что в консоли ругается на параметр         case 4: callsub L_Quest,8269,"Охота - Coco",5000,200,150,0,0,0,1,"^000000.";

но выдача предметов верна, даже если я убираю "^000000."; и делаю ""; всё равно консоль ругается, подскажите где я ошибся?

Изменено пользователем ucell-uz
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

По первому НПЦ можно при взятии квеста добавить переменную типа

set questRunning, .@quest1;

и по завершению квеста выставлять её в ноль, дабы не перебирать все возможные квесты, а при попытке взять квест проверять

if(questRunning > 0)

{

mes "У тебя уже есть квест. Закончи его."

*описание квеста*

close;

}

 

По второму нпц, проблема скорее в количестве аргументов переданных функции. В первом квесте на ядовитых спор НПЦ будет пытаться выдать "^000000"- штук крыльев бабочки. Но аргумент не является количеством, а просто метка цвета текста. Зачем она вообще там?

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

6 часов назад, shaitobu сказал:

По первому НПЦ можно при взятии квеста добавить переменную типа

set questRunning, .@quest1;

и по завершению квеста выставлять её в ноль, дабы не перебирать все возможные квесты, а при попытке взять квест проверять

 

Скрытое содержимое

 

 

По второму нпц, проблема скорее в количестве аргументов переданных функции. В первом квесте на ядовитых спор НПЦ будет пытаться выдать "^000000"- штук крыльев бабочки. Но аргумент не является количеством, а просто метка цвета текста. Зачем она вообще там?

я позже проверю если что-то не пойму отпишусь, а по поводу 2-го нпцшника, я в скриптах не особо и силён, поэтому воспользовался ну самым динозавровским методом, и что самое интересное, он вроде как сработал, благодаря этим самым количественным аргументам, про  getarg(1,-1) я узнал в файле с командами, если убираю -1 то нпц мне даёт весь список того что указанно в getitem но мне весь этот список  предметов не нужен, ибо квестов всего 5, и по поводу аргумента с цветовым текстом, если я убираю его тупо выставляю:

case 4: callsub L_Quest,8269,"Охота - Coco",5000,200,150,0,0,0,1;

я перепробовал разные фокусы чтобы не вылетал эрор в консоли, но что ни делай вылетает ошибка вот такая к примеру

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

 

Скрытый текст

 

b-278.jpg

 

 

Изменено пользователем ucell-uz
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

20 минуты назад, shaitobu сказал:

аргумент 2 у тебя в callsub - название квеста, а не кол-во базового опыта

ну дак это было

вроде как по умолчанию в скрипте я тут ничего не ковырял

а как нужно правильно его подставить?

getexp getarg(2,3);  ??

попробовал

getexp getarg(2,3); ругается на точку с запятой попробовал 

getexp getarg(2);

getexp getarg(3);  так же ругается на точку с запятой

скрипт команды говорят об обратном

 

Скрытый текст

*getexp <base xp>,<job xp>;

This command will give the invoking character a specified number of base 
and job experience points. Should be used as a quest reward. Negative values 
won't work.
Is subject to EXP bonuses and to the `quest_exp_rate` config option.

    getexp 10000,5000;

You can also assign directly to the parameters defined in
'db/constants.conf':

    BaseExp += 10000;
    JobExp += 5000;

You can also reduce the amount of experience points:

    BaseExp -= 10000;

When setting the parameters directly no bonuses or config options are applied. 

 

 

Изменено пользователем ucell-uz
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

callsub L_Quest,8268,"Охота - Elder Willow",5000,100,110,0,0,5,"^000000.";

getitem Novice_Potion,getarg(4);
getitem Cargo_Free_Ticket,getarg(5);
getitem Wing_Of_Butterfly,getarg(6,-2);
getitem Warp_Free_Ticket,getarg(7,-3);
getitem WOB_Rune,getarg(8,-4);
getexp getarg(2),getarg(3);

Приведи все вызовы в этот формат, там где тебе не надо выдавать предметы или опыт поставь просто 0

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

59 минут назад, shaitobu сказал:

callsub L_Quest,8268,"Охота - Elder Willow",5000,100,110,0,0,5,"^000000.";

getitem Novice_Potion,getarg(4);
getitem Cargo_Free_Ticket,getarg(5);
getitem Wing_Of_Butterfly,getarg(6,-2);
getitem Warp_Free_Ticket,getarg(7,-3);
getitem WOB_Rune,getarg(8,-4);
getexp getarg(2),getarg(3);

Приведи все вызовы в этот формат, там где тебе не надо выдавать предметы или опыт поставь просто 0

ыы ^*_*^

вы волшебник, я бы честно сам не допёр бы до этого, спасибо этот метод помог! никаких дебагов как по маслу!

вы уже 3-жды выручаете, остальные как воды в рот набрали!

Изменено пользователем ucell-uz
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

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