Boblen Опубликовано 1 сентября, 2005 Жалоба Поделиться Опубликовано 1 сентября, 2005 Сейчас. ИМХО, мало домов в Морре делаются без алхимической лаборатории... А что главное для алхимика? Это аккуратно рассортированные предметы, чтобы каждый лежал отдельно в своем ящичке, откуда его можно легко взять в нужных количествах. Сегодня вечером тут появится пример подобного скрипта (скриптов, если честно) с тестовым плагом и подробными комментариями... следите за темой! Ссылка на комментарий Поделиться на другие сайты Поделиться
Boblen Опубликовано 2 сентября, 2005 Автор Жалоба Поделиться Опубликовано 2 сентября, 2005 Итак, идея такова. В алхимической лаборатории будут стоять ящики под каждый ингредиент, будет активатор, нажав на который все ингредиенты из инвентаря игрока рассортируются по ящикам, есть список ингредиентов, чтобы в любой момент можно было глянуть, что у нас есть и в каких количествах. Тестовый пример и все скрипты в отдельных папках вы найдете в приаттаченом архиве. Чтобы посмотреть, как оно работает, подключите плаг и в консоли введите coc, House_mage (это копия Дома мага), там будут 4 ящика для зелий, активатор (сортировщик), свиток и ящик с ингред. для теста...А теперь, как это все устроено. ВНИМАНИЕ! ВСЕ СКРИПТЫ ДЛЯ ПОЛНОГО ВАРИАНТА, СО СВИТКОМ. ЕСЛИ ВЫ БУДЕТЕ ДЕЛАТЬ БЕЗ СВИТКА, ТО ВАМ НЕ ПОНАДОБЯТСЯ 2 ПОСЛЕДНИХ СКРИПТА, А ТАКЖЕ СЛЕДУЮЩИЕ СТРОКИ В ОСНОВНОМ:StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2"set saltrice_count to ( B_contain_saltrice -> GetItemCount, "ingred_saltrice_01" ) 1. Нужно создать контейнеры для каждого ингредиента (вместа с Трибуналом и БМ их 125, н есть и уникальные, которые сортировать не надо) со вместимостью (Emcubrance) 0. Теперь мы сможем добавить туда травы через скрипт, а вот сам игрок положить туда ничего не сможет (и не нужно это, сортировщик все равно работает быстрее). Также в каждом сундуке должен лежать любой предмет и он не должен покидать контенера, иначе скрипты могут неработать... предупредите об этом игрока.2. Скрипты:begin boblen_sorter_start short state short button short active ;Этот скрипт висит на активаторе и запускает ;первый сортировочный скрипт if ( OnActivate == 1 ); активировали скрипт set active to 1 endif if ( active == 0 ); пока неактивен - неработаем return elseif ( active == 1 ) if ( state == 0 ) MessageBox, "Начать сортировку?", "Да", "Нет"; задали вопрос set state to 1; больше не задаем endif endif if ( state == 1 ) set button to GetButtonPressed;ловим реакцию игрока if ( button == -1 ); пока ничего не нажато - неработаем return elseif ( button == 0 ); Нажали "да" StartScript, "boblen_sorter_main1"; Запуск 1го сортиров.скрипта set active to 0 set state to 0 return elseif ( button == 1 ); нажали "нет" - возврат на исходную set active to 0 set state to 0 return endif endif endЭтот скрипт висит на активаторе и запускает первый сортировочный глобальный скрипт (т.к. ингредиентов моного, то и сортировочных скриптов лучше сделать несколько, они будут стартовать друг за другом.Далее осн.скрипт:begin boblen_sorter_main1 ; Глобальный скрипт short state;переменная состояния short text_message;для теста if ( state == 4 ); state = число игред.-1 MessageBox, "Сортировка окончена" ;Следующая строка включает следующий по порядку сорт.скрипт ; В последнем скрипте ее быть не должно ;StartScript "boblen_sorter_main2" StopScript, "boblen_sorter_main1" set state to 0 set text_message to 0 return endif if ( state == 0 ); первый ингед. if ( text_message == 0 ); эти строки для тестовых сообщений-закомментируйте их, если хотите MessageBox, "Сортирую соленый рис" set text_message to ( text_message + 1 ) endif ;Это главная сорировочная часть, она сделана методом половинного деления ;Так скрипт быстрее работает, нежели сортировать по одному предмету ;Это можно сделать и через While, но, думаю, так лучше, т.к. ;практически не повлияет на скорость. if ( Player -> GetItemCount, "ingred_saltrice_01" >= 512 ) Player -> RemoveItem, "ingred_saltrice_01", 512 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 512 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 256 ) Player -> RemoveItem, "ingred_saltrice_01", 256 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 256 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 128 ) Player -> RemoveItem, "ingred_saltrice_01", 128 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 128 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 64 ) Player -> RemoveItem, "ingred_saltrice_01", 64 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 64 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 32 ) Player -> RemoveItem, "ingred_saltrice_01", 32 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 32 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 16 ) Player -> RemoveItem, "ingred_saltrice_01", 16 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 16 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 8 ) Player -> RemoveItem, "ingred_saltrice_01", 8 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 8 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 4 ) Player -> RemoveItem, "ingred_saltrice_01", 4 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 4 elseif ( Player -> GetItemCount, "ingred_saltrice_01" >= 2 ) Player -> RemoveItem, "ingred_saltrice_01", 2 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 2 elseif ( Player -> GetItemCount, "ingred_saltrice_01" > 0 ) Player -> RemoveItem, "ingred_saltrice_01", 1 B_contain_saltrice -> AddItem, "ingred_saltrice_01", 1 elseif ( Player -> GetItemCount, "ingred_saltrice_01" == 0 ) ;следующая строка считает кол-во ингред.в контейнере, чтобы отразить в свитке ; saltrice_count - глоб.переменная, содержащая кол-во определ.ингред ; поменяйте ее на нужную StopScript, "ingred_counter_main1" ;уберите комент и продублируйте след.строки на нужное кол-во списочных скр. ;StopScript, "ingred_counter_main2" set saltrice_count to ( B_contain_saltrice -> GetItemCount, "ingred_saltrice_01" ) set state to 1 endif endif if ( state == 1 ) if ( text_message == 1 ) MessageBox, "Сортирую мясо крысы" set text_message to ( text_message + 1 ) endif if ( Player -> GetItemCount, "ingred_rat_meat_01" >= 512 ) Player -> RemoveItem, "ingred_rat_meat_01", 512 B_contain_rat -> AddItem, "ingred_rat_meat_01", 512 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 256 ) Player -> RemoveItem, "ingred_rat_meat_01", 256 B_contain_rat -> AddItem, "ingred_rat_meat_01", 256 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 128 ) Player -> RemoveItem, "ingred_rat_meat_01", 128 B_contain_rat -> AddItem, "ingred_rat_meat_01", 128 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 64 ) Player -> RemoveItem, "ingred_rat_meat_01", 64 B_contain_rat -> AddItem, "ingred_rat_meat_01", 64 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 32 ) Player -> RemoveItem, "ingred_rat_meat_01", 32 B_contain_rat -> AddItem, "ingred_rat_meat_01", 32 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 16 ) Player -> RemoveItem, "ingred_rat_meat_01", 16 B_contain_rat -> AddItem, "ingred_rat_meat_01", 16 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 8 ) Player -> RemoveItem, "ingred_rat_meat_01", 8 B_contain_rat -> AddItem, "ingred_rat_meat_01", 8 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 4 ) Player -> RemoveItem, "ingred_rat_meat_01", 4 B_contain_rat -> AddItem, "ingred_rat_meat_01", 4 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" >= 2 ) Player -> RemoveItem, "ingred_rat_meat_01", 2 B_contain_rat -> AddItem, "ingred_rat_meat_01", 2 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" > 0 ) Player -> RemoveItem, "ingred_rat_meat_01", 1 B_contain_rat -> AddItem, "ingred_rat_meat_01", 1 elseif ( Player -> GetItemCount, "ingred_rat_meat_01" == 0 ) StopScript, "ingred_counter_main1" ;уберите комент и продублируйте след.строки на нужное кол-во списочных скр. ;StopScript, "ingred_counter_main2" set ratmeat_count to ( B_contain_rat -> GetItemCount, "ingred_rat_meat_01" ) set state to 2 endif endif if ( state == 2 ) if ( text_message == 2 ) MessageBox, "Сортирую корень трамы" set text_message to ( text_message + 1 ) endif if ( Player -> GetItemCount, "ingred_trama_root_01" >= 512 ) Player -> RemoveItem, "ingred_trama_root_01", 512 B_contain_trama -> AddItem, "ingred_trama_root_01", 512 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 256 ) Player -> RemoveItem, "ingred_trama_root_01", 256 B_contain_trama -> AddItem, "ingred_trama_root_01", 256 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 128 ) Player -> RemoveItem, "ingred_trama_root_01", 128 B_contain_trama -> AddItem, "ingred_trama_root_01", 128 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 64 ) Player -> RemoveItem, "ingred_trama_root_01", 64 B_contain_trama -> AddItem, "ingred_trama_root_01", 64 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 32 ) Player -> RemoveItem, "ingred_trama_root_01", 32 B_contain_trama -> AddItem, "ingred_trama_root_01", 32 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 16 ) Player -> RemoveItem, "ingred_trama_root_01", 16 B_contain_trama -> AddItem, "ingred_trama_root_01", 16 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 8 ) Player -> RemoveItem, "ingred_trama_root_01", 8 B_contain_trama -> AddItem, "ingred_trama_root_01", 8 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 4 ) Player -> RemoveItem, "ingred_trama_root_01", 4 B_contain_trama -> AddItem, "ingred_trama_root_01", 4 elseif ( Player -> GetItemCount, "ingred_trama_root_01" >= 2 ) Player -> RemoveItem, "ingred_trama_root_01", 2 B_contain_trama -> AddItem, "ingred_trama_root_01", 2 elseif ( Player -> GetItemCount, "ingred_trama_root_01" > 0 ) Player -> RemoveItem, "ingred_trama_root_01", 1 B_contain_trama -> AddItem, "ingred_trama_root_01", 1 elseif ( Player -> GetItemCount, "ingred_trama_root_01" == 0 ) StopScript, "ingred_counter_main1" ;уберите комент и продублируйте след.строки на нужное кол-во списочных скр. ;StopScript, "ingred_counter_main2" set trama_count to ( B_contain_trama -> GetItemCount, "ingred_trama_root_01" ) set state to 3 endif endif if ( state == 3 ) if ( text_message == 3 ) MessageBox, "Сортирую шкуру алита" set text_message to ( text_message + 1 ) endif if ( Player -> GetItemCount, "ingred_alit_hide_01" >= 512 ) Player -> RemoveItem, "ingred_alit_hide_01", 512 B_contain_alit -> AddItem, "ingred_alit_hide_01", 512 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 256 ) Player -> RemoveItem, "ingred_alit_hide_01", 256 B_contain_alit -> AddItem, "ingred_alit_hide_01", 256 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 128 ) Player -> RemoveItem, "ingred_alit_hide_01", 128 B_contain_alit -> AddItem, "ingred_alit_hide_01", 128 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 64 ) Player -> RemoveItem, "ingred_alit_hide_01", 64 B_contain_alit -> AddItem, "ingred_alit_hide_01", 64 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 32 ) Player -> RemoveItem, "ingred_alit_hide_01", 32 B_contain_alit -> AddItem, "ingred_alit_hide_01", 32 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 16 ) Player -> RemoveItem, "ingred_alit_hide_01", 16 B_contain_alit -> AddItem, "ingred_alit_hide_01", 16 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 8 ) Player -> RemoveItem, "ingred_alit_hide_01", 8 B_contain_alit -> AddItem, "ingred_alit_hide_01", 8 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 4 ) Player -> RemoveItem, "ingred_alit_hide_01", 4 B_contain_alit -> AddItem, "ingred_alit_hide_01", 4 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" >= 2 ) Player -> RemoveItem, "ingred_alit_hide_01", 2 B_contain_alit -> AddItem, "ingred_alit_hide_01", 2 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" > 0 ) Player -> RemoveItem, "ingred_alit_hide_01", 1 B_contain_alit -> AddItem, "ingred_alit_hide_01", 1 elseif ( Player -> GetItemCount, "ingred_alit_hide_01" == 0 ) StopScript, "ingred_counter_main1" ;уберите комент и продублируйте след.строки на нужное кол-во списочных скр. ;StopScript, "ingred_counter_main2" set alithide_count to ( B_contain_alit -> GetItemCount, "ingred_alit_hide_01" ) set state to 4 endif endif endВ этом скрипте применен метод половинного деления, т.к. работает он быстрее, чем простое удаление по одной штучке, но и скрипт получается больше. Поэтому их у вас, скорее всего, будет несколько. А следующие строкиStopScript, "ingred_counter_main1";уберите комент и продублируйте след.строки на нужное кол-во списочных скр. ;StopScript, "ingred_counter_main2"Я ввел только сейчас, в скрипте в плаге их нет, но они должны помочь пресечь доступ к одной переменной из разных скриптов. 2. Самое неприятное. Нужно создать КУЧУ глобальных переменных. в которых будет храниться кол-во ингредиентов в каждом ящике. В принципе можно обойтись и без свитка, тогд вся след.часть вам не пригодится, но я подумал, что алхимику всегда удобно знать, что у него есть, а чего нету.Далее создаем свиток (или книгу, не важно) и пишем в ней то, что есть и у меня, только на столько ингредиентов, на сколько нужно.И снова скрипты:begin ingred_counter_start ; Этот скрипт должен быть НА ВСЕХ контейнерах с ингредиентами ; Он стартует глоб.скрипт для того, чтобы снова подсчитать ; ингредиенты в ящике short active_state if ( OnActivate == 1 ) set active_state to 1 Activate endif if ( active_state == 0 ) return elseif ( active_state == 1 ) if ( ScriptRunning, "ingred_counter_main1" == 0 ) MessageBox, "Запускаем ingred_counter_main1";отладочные сообщения StartScript, "ingred_counter_main1" set active_state to 0 else MessageBox, "ingred_counter_main1 уже запущен" set active_state to 0 endif endif endЭтот скрипт должен быть на всех ящиках с ингредиентами, при доступе к ним игрока он запускает скрипт подсчета ингредиентов.А вот осн.скрипт, их также будет несколько и в тестовом плаге скрипт необновленный:begin ingred_counter_main1 ;Глобальный скрипт, пересчитывающий число ингредиентов ; в контейнерах после доступа к ним float timer ;В следующих строках запускайте все свои глоб.скрипты для списка ; возможно их будет 3 или 4 ;StartScript, "ingred_counter_main2" if ( GetPCCell, "House_mage" != 1 ); если ушли из дома - выкл.скрипт set timer to 0 StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2" MessageBox, "Ingred_counter_main1 остановлен";закомментируйте строку после теста return endif if ( timer > 120 );после 2 минут работы останавливаем set timer to 0 StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2" MessageBox, "Ingred_counter_main1 остановлен" return endif ;--------------------------------------------------- ;В скрипты "ingred_counter_main2" и последующие вставляйте ; только эту часть, не объявляйте переменную timer ; не вводите строки set timer to 0 и set timer to ( timer + GetSecondsPassed ) ; и продублируйте нужное число раз;StopScript, "ingred_counter_main2" ;---------------------------------------------------- if (( B_contain_saltrice -> GetItemCount, "ingred_saltrice_01" ) != saltrice_count ) set saltrice_count to ( B_contain_saltrice -> GetItemCount, "ingred_saltrice_01" ) StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2" set timer to 0 MessageBox, "Ingred_counter_main1 остановлен" return endif if (( B_contain_rat -> GetItemCount, "ingred_rat_meat_01" ) != ratmeat_count ) set ratmeat_count to ( B_contain_rat -> GetItemCount, "ingred_rat_meat_01" ) StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2" set timer to 0 MessageBox, "Ingred_counter_main1 остановлен" return endif if (( B_contain_trama -> GetItemCount, "ingred_trama_root_01" ) != trama_count ) set trama_count to ( B_contain_trama -> GetItemCount, "ingred_trama_root_01" ) StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2" set timer to 0 MessageBox, "Ingred_counter_main1 остановлен" return endif if (( B_contain_alit -> GetItemCount, "ingred_alit_hide_01" ) != alithide_count ) set alithide_count to ( B_contain_alit -> GetItemCount, "ingred_alit_hide_01" ) StopScript, "ingred_counter_main1" ;StopScript, "ingred_counter_main2" set timer to 0 MessageBox, "Ingred_counter_main1 остановлен" return endif set timer to ( timer + GetSecondsPassed ) endНадеюсь в деле копирования нужных скриптов вы разберетесь сами, там все не так уж сложно... а для того, чтобы проще было писать осн.сортировочный скрипт - в архиве вам в помощь файлик main_template, как им пользоваться написано в нем самом. Удачного модостроительства Ссылка на комментарий Поделиться на другие сайты Поделиться
Boblen Опубликовано 2 сентября, 2005 Автор Жалоба Поделиться Опубликовано 2 сентября, 2005 А теперь я покажу вам, как можно создать мусорный ящик для всяких ненужных уже вещей. Ведь к середине игры в вашем поместье (или где вы там живете) скапливается куча вещей, которые и продавать лень, и пространство они замусоривают, замедляя игру.Вот и выход - ложим их в этот ящик и они все уходят в небытие... Для этого нам понадобится пустой контейнер, теперь уже с ненулевой загрузкой, ставьте ее побольше - нам туда много чего придется сложить, и какой-нибудь активатор. В аттаче вы найдете архив с примерами скриптов, а также плаг для теста (это тот же плагин, что и в предыдущем случае, лишь дополненный мусоркой, она в другом конце комнаты). 1. Скрипт begin trash_activator short active short message_state short buton short trash_timer ; Trash_reset - глоб.переменная, указывающая на начало обнуления контейнера if ( OnActivate == 1 ); Активировали set active to 1 endif if ( active == 0 ); если нет - неработаем return endif if ( active == 1 ); Фаза 1 if ( message_state == 0 ); Задаем вопрос MessageBox, "Очистить мусорный контейнер?", "Да", "Нет" set message_state to 1 elseif ( message_state == 1 );вопрос задан, ждем ответ set buton to GetButtonPressed if ( buton == -1 ) return elseif ( buton == 0 ); ответили "Да" - идем в фазу 2 set message_state to 0 set active to 2 set trash_timer to 0 elseif ( buton == 1 ); ответили "нет" - возвращаемся назад set message_state to 0 set active to 0 set trash_timer to 0 endif endif endif if ( active == 2 ); Фаза 2 set Trash_reset to 1;начали удаление контейнера set active to 3 elseif ( active == 3 ); фаза 3 set trash_timer to ( trash_timer + 1 ); даем ему время на удаление - 6 фреймов if ( trash_timer < 6 ) return else set active to 4 endif elseif ( active == 4 ); фаза 4 ;ставим новый пустой контейнер на прежнее место и обнуляем переменные PlaceItemCell, boblen_trashcan, House_mage, 4980.496, 3081.028, 16036.777, 10800 set trash_timer to 0 set active to 0 endif end Он вешается на активатор и служит для задания вопроса игроку, а также включает скрипт на ящике для его удаления, а после ставит новую копию ящика на старое место. 2. Скрипт begin trash_reset_scr short deltimer ;Trash_reset - глоб.переменная, указывающая на начало обнуления контейнера if ( Trash_reset == 0 ); собираем вещички if ( deltimer != 0 ); обнулим тут таймер set deltimer to 0 endif return endif if ( Trash_reset == 1 ); начинаем очистку!!! if ( deltimer == 0 ); 1 фрейм - дисаблим сундук Disable endif if ( deltimer < 4 ); ждем 4 фрейма set deltimer to ( deltimer + 1 ) endif if ( deltimer == 4 ); 4 фрейм - обнуляем глоб.перем.для послед.использ. set Trash_reset to 0 set deltimer to ( deltimer + 1 ) endif if ( deltimer == 5 ); 5 фрейм - удаляем себя полностью SetDelete, 1 endif endif end Он вешается на мусорный контейнер и служит для его удаления. Вот и все, надеюсь он поможет вам создать дом Вашей (и нашей) мечты. И не забывайте принимать участие в конкурсе. Ссылка на комментарий Поделиться на другие сайты Поделиться
Boblen Опубликовано 9 сентября, 2005 Автор Жалоба Поделиться Опубликовано 9 сентября, 2005 И еще один скрипт для вашего дома. Вам ведь всегда хотелось иметь в доме бочки с выпивкой, а то она такая тяжелая. Нет ничего проще - создаем активатор, мождель уже есть в игре, и вешаем на него такой скрипт (я приведу скрипт для мацта, для остальных напитков вам придется заменить только ID напитков и их названия в messagebox - ничего сложного).Попробовать в работе можно, подключив плаг из архива и набрав в консоли coc, drink_houseСкрипт:begin BES_mazt_script_adv short MessageOn short buttons short capacity;вместимость бочки short tempcapacity short tempcap short active ; active=0 - скрипт не работает ; active=1 - задаем вопросы ; active=10 - секция 10 - заполнение кега ; active=20 - секция 20 - выбираем сколько взять ; active=30 - секция 30 - не используется ; active=40 - секция 40 - взять нужное кол-во ; active=50 - секция 50 - пьем из бочки if ( OnActivate == 1 ) set active to 1 endif if ( active == 0 ) return endif if ( active == 1 ); самое начало скрипта if ( capacity == 0 ); в бочке ничего нет if ( MessageOn == 0 ); спросим и пойдем дальше MessageBox, "В бочке нет мацта", "Заполнить кег", "Ненадо" set MessageOn to 1 elseif ( MessageOn == 1 ); тут будем ждать, пока игрок выберет set buttons to GetButtonPressed if ( buttons == -1 ) return elseif ( buttons == 0 );нажал "Заполнить" set active to 10; идем в секцию 10 set MessageOn to 0 elseif ( buttons == 1 ); нажал "Ненадо" - все сбросим set MessageOn to 0 set active to 0 endif endif elseif ( capacity > 0 ); в бочке что-то есть if ( MessageOn == 0 ); сообщим сколько и спросим побольше MessageBox, "В бочке %g порций мацта", capacity, "Заполнить кег", "Заполнить тару", "Выпить", "Отмена" set MessageOn to 1 elseif ( MessageOn == 1 ); тут будем ждать, пока игрок выберет set buttons to GetButtonPressed if ( buttons == -1 ) return elseif ( buttons == 0 ); Выбрал "Заполнить" set active to 10; Идем в секцию 10 set MessageOn to 0 elseif ( buttons == 1 ); Выбрал разлить в тару set active to 20; идем в секцию 20 set tempcapacity to 1 set MessageOn to 0 elseif ( buttons == 2 ); выбрал выпить set active to 50; идем в секцию 50 set MessageOn to 0 elseif ( buttons == 3 ); выбрал "Отмена" set active to 0; сбросим все set MessageOn to 0 endif endif endif endif ;Секция 10 - заполнение бочки ;Заполняем методом половинного деления ;После выдаем сообщение, сколько порций в бочке if ( active == 10 ) if ( player -> GetItemCount, "Potion_Local_Brew_01" >= 128 ) set capacity to ( capacity + 128 ) player -> RemoveItem, "Potion_Local_Brew_01", 128 elseif ( player -> GetItemCount, "Potion_Local_Brew_01" >= 32 ) set capacity to ( capacity + 32 ) player -> RemoveItem, "Potion_Local_Brew_01", 32 elseif ( player -> GetItemCount, "Potion_Local_Brew_01" >= 8 ) set capacity to ( capacity + 8 ) player -> RemoveItem, "Potion_Local_Brew_01", 8 elseif ( player -> GetItemCount, "Potion_Local_Brew_01" >= 1 ) set capacity to ( capacity + 1 ) player -> RemoveItem, "Potion_Local_Brew_01", 1 elseif ( player -> GetItemCount, "Potion_Local_Brew_01" == 0 ) PlaySound, "potion success" MessageBox, "Сейчас в бочке %g порций мацта", capacity set active to 0 return endif endif ;Секция 20 - выбрать, сколько взять if ( active == 20 ) if ( MessageOn == 0 ); зададим вопрос MessageBox, "Сейчас в бочке %g порций мацта. Вы берете %g порций", capacity, tempcapacity, "-100", "-10", "-1", "OK", "+1", "+10", "+100", "Все", "Ничего" set MessageOn to 1 elseif ( MessageOn == 1 ) set buttons to GetButtonPressed if ( buttons == -1 ); ждем ответа return elseif ( buttons == 0 ); выбрали -100 set tempcapacity to ( tempcapacity - 100 ) if ( tempcapacity < 0 ) set tempcapacity to 0 set MessageOn to 0; спросим еще elseif ( tempcapacity > capacity ) set tempcapacity to capacity set MessageOn to 0 endif set MessageOn to 0 elseif ( buttons == 1 ); выбрали -10 set tempcapacity to ( tempcapacity - 10 ) if ( tempcapacity < 0 ) set tempcapacity to 0 set MessageOn to 0 elseif ( tempcapacity > capacity ) set tempcapacity to capacity set MessageOn to 0 endif set MessageOn to 0 elseif ( buttons == 2 ); выбрали -1 set tempcapacity to ( tempcapacity - 1 ) if ( tempcapacity < 0 ) set tempcapacity to 0 set MessageOn to 0 elseif ( tempcapacity > capacity ) set tempcapacity to capacity set MessageOn to 0 endif set MessageOn to 0 elseif ( buttons == 3 ); выбрали ОК - идем в секцию 40 set active to 40 set MessageOn to 0 set capacity to ( capacity - tempcapacity ); считаем остаток set tempcap to tempcapacity; запоминаем сколько взяли elseif ( buttons == 4 ); выбрали +1 set tempcapacity to ( tempcapacity + 1 ) if ( tempcapacity < 0 ) set tempcapacity to 0 set MessageOn to 0 elseif ( tempcapacity > capacity ) set tempcapacity to capacity set MessageOn to 0 endif set MessageOn to 0 elseif ( buttons == 5 ); выбрали +10 set tempcapacity to ( tempcapacity + 10 ) if ( tempcapacity < 0 ) set tempcapacity to 0 set MessageOn to 0 elseif ( tempcapacity > capacity ) set tempcapacity to capacity set MessageOn to 0 endif set MessageOn to 0 elseif ( buttons == 6 ); выбрали +100 set tempcapacity to ( tempcapacity + 100 ) if ( tempcapacity < 0 ) set tempcapacity to 0 set MessageOn to 0 elseif ( tempcapacity > capacity ) set tempcapacity to capacity set MessageOn to 0 endif set MessageOn to 0 elseif ( buttons == 7 ); выбрали все set tempcapacity to capacity; идем брать все set tempcap to tempcapacity set capacity to 0 set active to 40 set MessageOn to 0 elseif ( buttons == 8 ); выбрали отмену - сбросим set tempcapacity to 1 set MessageOn to 0 set active to 0 endif endif endif ;Секция 40 - взять все ;Забираем также, как и заполняем бочку ;Методом половинного деления ;По окончании выдаем сообщение и останавливаемся if ( active == 40 ) if ( tempcapacity >= 128 ) set tempcapacity to ( tempcapacity - 128 ) player -> AddItem, "Potion_Local_Brew_01", 128 elseif ( tempcapacity >= 32 ) set tempcapacity to ( tempcapacity - 32 ) player -> AddItem, "Potion_Local_Brew_01", 32 elseif ( tempcapacity >= 8 ) set tempcapacity to ( tempcapacity - 8 ) player -> AddItem, "Potion_Local_Brew_01", 8 elseif ( tempcapacity >= 1 ) set tempcapacity to ( tempcapacity - 1 ) player -> AddItem, "Potion_Local_Brew_01", 1 elseif ( tempcapacity == 0 ) PlaySound, "potion success" MessageBox, "Вы взяли %g порций мацта. В бочке осталось %g порций", tempcap, capacity set active to 0 endif endif ;Секция 50 - выпить if ( active == 50 ) if ( capacity > 0 ); выпивки достаточно set capacity to ( capacity - 1 );возьмем порцию player -> AddItem, "Potion_Local_Brew_01", 1; дадим игроку player -> Equip, "Potion_Local_Brew_01"; заставим его выпить MessageBox, "Вы выпили порцию мацта. В бочке осталось %g порций.", capacity; Скажем остаток set active to 0; остановимся else set active to 1; А если недостаточно - предложим заполнить endif endif end Ссылка на комментарий Поделиться на другие сайты Поделиться
Джэк Опубликовано 18 ноября, 2005 Жалоба Поделиться Опубликовано 18 ноября, 2005 А интересно, когда появится сам плаг, а то у меня глаза в стороны расходятся от размера скриптов Ссылка на комментарий Поделиться на другие сайты Поделиться
GromDron Опубликовано 9 июня, 2006 Жалоба Поделиться Опубликовано 9 июня, 2006 мне тоже интересно Ссылка на комментарий Поделиться на другие сайты Поделиться
UraXa Опубликовано 26 июля, 2006 Жалоба Поделиться Опубликовано 26 июля, 2006 В этом скрипте применен метод половинного деления, т.к. работает он быстрее, чем простое удаление по одной штучке, но и скрипт получается больше. Поэтому их у вас, скорее всего, будет несколько.А почему нельзя:short trama_rootset trama root to ( player -> Getitemcount "trama root" )player->removeitem "trama root" trama_roottrama_container->additem "trama root" trama_root Ссылка на комментарий Поделиться на другие сайты Поделиться
LonWolf Опубликовано 26 июля, 2006 Жалоба Поделиться Опубликовано 26 июля, 2006 А почему нельзя:short trama_rootset trama root to ( player -> Getitemcount "trama root" )player->removeitem "trama root" trama_roottrama_container->additem "trama root" trama_root Потому, уважаемый, что эти функции могут принимать глобальные переменные и только в поле результатов диалога. Ссылка на комментарий Поделиться на другие сайты Поделиться
UraXa Опубликовано 29 июля, 2006 Жалоба Поделиться Опубликовано 29 июля, 2006 Разве? У меня вполне это в скрипте работало. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти