Название:Full-Inventory Crafting System Авторы:bowser499 aka [DUOS] and SirNikolas Тип исполнения:JASS2 and cJass Тестовая карта:Присутствует Минимальный патч:Любой
Одна из нашумевших наработок, которую мало кто доводил до конца конкретно на JASS2. Из-за крайней сложности её создания решил выложить, так как это решит много вопросов, с этим связанных.
Возможности:
Сбор при полном инвентаре (рецепты максимум до 7 слотов);
Сбор с участием идентичных предметов;
Смена иконки предмета из магазина и предмета в инвентаре (покупаешь рецепт с иконкой сборного предмета - в инвентарь идет свиток);
Смена предмета на деактивированный предмет (любой, кто берет предмет, не принадлежащий ему, не получает свойств предмета);
Сложение "зарядов" предметов (банка с 3 зарядами + банка с 8 зарядами = банка с 11 зарядами).
База данных предметов и рецептов формируется по следующему принципу:
1. Создаются в РО три копии одного и того же предмета:
Normal (обычный предмет, находится у купившего)
Rune (используется мгновенно, находится в магазине и лежит на земле)
Disabled (находится у того, кто "украл" предмет)
Обратите внимание: Все предметы должны быть нестандартными! 2. Rune-копии добавляются в магазины. 3. В триггере инициализации регистрируются предметы путем вызова для каждого FICS_Register(rawNormal, rawRune, rawDisabled, goldCost, lumberCost). Каждому предмету дается порядковый номер, начиная с единицы. 4. Наконец, составляется список рецептов. Вызывается функция FICS_RegisterN(resultId, id0, id1, ..., idN), где N - количество ингредиентов, а resultId, id0, id1, ..., id6 - порядковые номера предметов.
Импорт наработки:
Версия JASS2: 1. Скопируйте основной код карты FICS v1.6.w3x в основной код своей карты. 2. Скопируйте триггер "FICS". 3. Скопируйте все переменные (для облегчения задачи можно скопировать, а затем удалить триггер "FICS variables", если включено автоматическое создание переменных).
Версия cJass: 1. Скопируйте триггер "FICS cJass" (и разблокируйте его).
private constant timer T = CreateTimer(); private item Dropped[ ]; private int DropNum[ ], Temp[21]; private int DropCount = 0; private int ItemMap[ITEM_MAP_SIZE]; private int Items[500][5], Recipes[256][8]; private int ItemCount = 0, RecipeCount = 0; private int FirstList[ ], LastList[ ]; private int Recipe[ ], Next[ ], ListCount = 0; private int CallbackArgument = 0; private trigger Callbacks[500][2]; private bool Flag = true;
public int GetIndexById(int id) { return ItemMap[id - 'I000']; }
public int GetNormalByIndex(int index) { return Items[index][0]; }
public int GetRuneByIndex(int index) { return Items[index][1]; }
public int GetDisabledByIndex(int index) { return Items[index][2]; }
public int GetGoldCostByIndex(int index) { return Items[index][3]; }
public int GetLumberCostByIndex(int index) { return Items[index][4]; }
public trigger GetPickupCallbackByIndex(int index) { return Callbacks[index][0]; }
public trigger GetDropCallbackByIndex(int index) { return Callbacks[index][1]; }
public int GetManipulatedItemIndex() { return CallbackArgument; }
public int Register(int id, int rune, int dis, int gcost, int lcost) { ItemCount++; static if DEBUG_MODE { if id - 'I000' > ITEM_MAP_SIZE || rune - 'I000' > ITEM_MAP_SIZE || dis - 'I000' > ITEM_MAP_SIZE || id - 'I000' < 0 || rune - 'I000' < 0 || dis - 'I000' < 0 { BJDebugMsg("|cffff0000CRITICAL ERROR in FICS: Too many items. Increase the ITEM_MAP_SIZE constant. This message also may be shown if you are trying to register a standard item. Use only custom items instead.|r"); return 0; } } ItemMap[id - 'I000'] = ItemCount; ItemMap[rune - 'I000'] = ItemCount; ItemMap[dis - 'I000'] = ItemCount; Items[ItemCount][0] = id; Items[ItemCount][1] = rune; Items[ItemCount][2] = dis; Items[ItemCount][3] = gcost; Items[ItemCount][4] = lcost; return ItemCount; }
Прошу прощения, за то что поднимаю старую тему, но я создал второго героя за Красного игрока и дал ему перчатки скорости. Получилось так что у обоих героев появился предмет. Передал обратно и у первого уже 3 перчатки. Ну и еще у меня пару ошибок в триггерах (уже в моей карте). Все кроме "FICS". Отсутствует функция FICS_Register в Базе...
Прошу прощения, за то что поднимаю старую тему, но я создал второго героя за Красного игрока и дал ему перчатки скорости. Получилось так что у обоих героев появился предмет. Передал обратно и у первого уже 3 перчатки. Ну и еще у меня пару ошибок в триггерах (уже в моей карте). Все кроме "FICS". Отсутствует функция FICS_Register в Базе...
Обновил систему. Исправил баги, связанные с передачей предметов другим героям и другим игрокам. Еще больше оптимизировал поиск предмета в базе, и необходимость в функции Proceed отпала. Однако появляется новое ограничение: можно использовать только кастомные предметы. Если в карте более 936 предметов, Вам придется использовать cJass-версию, т. к. только в ней можно установить размер массива больше максимального.