Название: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_Proceed(). 5. Наконец, составляется список рецептов. Вызывается функция FICS_RegisterN(resultId, id0, id1, ..., idN), где N - количество ингредиентов, а resultId, id0, id1, ..., id6 - порядковые номера предметов.
Импорт наработки:
Версия JASS2: 1. Скопируйте основной код карты FICS v1.5.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 Ids[ ], Num[ ], Length = 0; 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 bool Flag = true;
public int Register(int id, int rune, int dis, int gcost, int lcost) { ItemCount++; Ids [Length]= id; Ids[Length + 1] = rune; Ids[Length + 2] = dis; Num [Length]= ItemCount; Num[Length + 1] = ItemCount; Num[Length + 2] = ItemCount; Length += 3; Items[ItemCount][0] = id; Items[ItemCount][1] = rune; Items[ItemCount][2] = dis; Items[ItemCount][3] = gcost; Items[ItemCount][4] = lcost; return ItemCount; }
//Сортировка расческой public void Proceed() { int jump = Length; bool end = true; whilenot jump == 1 && end { if jump > 1 { jump = R2I(jump * .802); } end = true; for (int i = 0; i + jump < Length; i++) { if Ids [i]> Ids[i + jump] { int t = Ids[i]; Ids [i]= Ids[i + jump]; Ids[i + jump] = t; t = Num[i]; Num [i]= Num[i + jump]; Num[i + jump] = t; end = false; } } } }
private int BinSearch(int id) { int first = 0, last = Length; if id >= Ids[0] && id <= Ids[last - 1] { whilenot first >= last { int mid = (first + last) / 2; if id <= Ids [mid]{ last = mid; } else { first = mid + 1; } } if id == Ids [last]{ return Num[last]; } } return 0; }
public void Register7(int result, int i0, int i1, int i2, int i3, int i4, int i5, int i6) { #for j(0, 6) Temp [j]= i##j; #endfor RecipeCount++; //Записываем в Recipes сортированные по невозрастанию индексы for (int i = 0) { if Temp [i]> 0 { if Temp[i]:LastList == 0 || Temp[i]:LastList:Recipe != RecipeCount { ListCount++; if Temp[i]:LastList == 0 { Temp[i]:FirstList = ListCount; } else { Temp[i]:LastList:Next = ListCount; } Temp[i]:LastList = ListCount; Temp[i]:LastList:Recipe = RecipeCount; Temp[i]:LastList:Next = 0; } int j = i; whilenot j == 0 || Recipes[RecipeCount][j - 1] >= Temp [i]{ Recipes[RecipeCount] [j]= Recipes[RecipeCount][j - 1]; j--; } Recipes[RecipeCount] [j]= Temp[i]; } exitwhen i == 6; i++; } Recipes[RecipeCount][7] = result; }
public void Register6(int result, int i0, int i1, int i2, int i3, int i4, int i5) { Register7(result, i0, i1, i2, i3, i4, i5, 0); }
public void Register5(int result, int i0, int i1, int i2, int i3, int i4) { Register6(result, i0, i1, i2, i3, i4, 0); }
public void Register4(int result, int i0, int i1, int i2, int i3) { Register5(result, i0, i1, i2, i3, 0); }
public void Register3(int result, int i0, int i1, int i2) { Register4(result, i0, i1, i2, 0); }
public void Register2(int result, int i0, int i1) { Register3(result, i0, i1, 0); }
//Бесполезная штука, в общем-то, но такое тоже возможно public void Register1(int result, int i0) { Register2(result, i0, 0); }
function SH_Filter takes nothing returns boolean local unit u = GetFilterUnit() local real a = GetUnitFacing(u) local real x = GetUnitX(u)+80.*Cos(a*.0174532) local real y = GetUnitY(u)+80.*Sin(a*.0174532) local location l = Location(x,y) local location l2 = GetUnitLoc(u) local real z = GetLocationZ(l) local real z2 = GetLocationZ(l2) local real z3Rb = z - z2 local real dms = GetUnitDefaultMoveSpeed(u)
if IsUnitType(u,UNIT_TYPE_GROUND) or IsUnitType(u, UNIT_TYPE_HERO) then
if z3Rb > 30. and z3Rb < 69. then call SetUnitMoveSpeed(u,dms*.3) endif
if z3Rb > 70. and z3Rb < 179. then call SetUnitMoveSpeed(u,dms*.1) endif
if z3Rb > 180. and z3Rb < 999. then call SetUnitMoveSpeed(u,0.) endif
if z3Rb >= -15. and z3Rb <= 15. then call SetUnitMoveSpeed(u,dms) endif
if z3Rb < -30. and z3Rb > -69. then call SetUnitMoveSpeed(u,dms*1.5) endif
if z3Rb < -80. and z3Rb > -999. then call SetUnitMoveSpeed(u,dms*2.) endif
endif
call RemoveLocation(l) call RemoveLocation(l2)
return false endfunction
function SH_Ac takes nothing returns nothing local group g = CreateGroup()
Примените свои таланты решения головоломок против своих противников. Совмещайте драгоценности для того, чтобы набрать ресурсы, которые можно потратить на создание боевых единиц StarCraft 2, которыми можно уничтожить базу противника!
StarJeweled - игра-головоломка, где задачей игроков является совмещение групп бриллиантов по их цветам и выбор боевых единиц StarCraft 2, чтобы перебороть войско противника и уничтожить его базу. Можно играть против ИИ, а можно - против реальных игроков.
Скриншоты:
Не всякая кухарка может толково вести кампанию. В этой кулинарной войне нужно собирать экзотические ингредиенты и готовить из них особые блюда. Подойдите к выбору рецепта основательно — и вы сможете доказать свое превосходство над соперниками-поварами и прославитесь на весь Айур!
В каждом раунде игры Aiur Chef предлагается один особый ингредиент и три великолепных рецепта, в которых он используется. Но прежде чем освоить приготовление этих блюд, вам придется порыскать по карте в поисках разнообразных продуктов, и в том числе и этого ингредиента. Для каждого блюда нужно будет собрать несколько продуктов из списка, который показывается в левом верхнем углу экрана. Ингредиенты можно найти, а можно получить за уничтожение того или иного существа. Но не жадничайте! Место в вашем инвентаре ограничено, так что разумнее будет каждый раз сосредоточиться на продуктах для какого-то одного блюда. Когда вы соберете все необходимые продукты, нужно будет вернуться на кухню в центре карты и приготовить блюдо. Использование особого ингредиента принесет вам определенное количество очков, в зависимости от того, насколько сложен рецепт. За приготовление некоторых блюд вам будут присвоены особые способности, которые можно использовать один раз: печка возвращения (переносит вас на кухню) и приманка (подделка, имитирующая особый ингредиент данного раунда: ее можно положить на землю, чтобы обмануть другого игрока). Используйте эти способности, как только представится случай. Именно они могут стать решающим фактором в победе над соперниками. Те игроки, кто наберет больше всего очков по итогам трех раундов, получат звание кулинарного гуру всего сектора Корпулу. Когда на кону стоит такой престижный титул, напряженной борьбы не избежать. Держите пси-клинки наготове!
Скриншоты:
Эта кампания ведется в паре с другим игроком. Ночью вам предстоит отбивать атаки зергов на вашу базу, а днем — возводить боевые единицы и укрепления. Здесь требуется командный дух, иначе вы долго не протянете.
Left 2 Die — это командная версия задания «Эпидемия» из StarCraft II: Wings of Liberty, которое разбито на две фазы: ночную и дневную.Ночью вам с партнером по команде предстоит отражать атаки зараженных зергами терранов, волнами нападающих на вашу базу. Чтобы выжить, нужно использовать бункеры и другие средства защиты. Кроме того, необходимо ответственно подойти к распределению ресурсов. Берегитесь жирдяя и танколиска: это особые боевые единицы зергов, которые обладают уникальными мощными способностями. Перед ними уязвима даже самая сильная оборона. Днем атаки прекращаются, и вы можете спокойно заниматься созидательным трудом — обучать дополнительные боевые единицы. Их можно сразу же отправлять на расправу с поселениями зараженных терранов, которые разбросаны по всей карте. Кроме того, днем надо строить укрепления, которые ночью будут защищать базу от беспощадного натиска зергов. Выжить в Left 2 Die сложно. Но время от времени можно рассчитывать на подмогу. Например, за убийство особых видов зергов и уничтожение зараженных зданий вы можете получить биомассу зергов. Если использовать ее в научно-исследовательском комплексе, расположенном на вашей базе, то можно вызывтаь новые боевые единицы — медиков и огнеметчиков, — а также строить турели «Погибель». Этиулучшения помогут вам с партнером в нелегкой борьбе против зергов.Для победы в Left 2 Die необходимо искоренить вирус зергов до основания. Слаженность ночных операций, ведение контратак, восстановление базы днем и рациональное использование биомассы — вот верный путь к победе!
Скриншоты:
Blizzard DOTA™ – новая официальная карта для StarCraft® II, разработанная по мотивам Defense of the Ancients (DOTA) – карты, созданной для Warcraft® III. Как и многие другие разработки на основе DOTA, Blizzard DOTA — это командная игра, в которой вы управляете героем, обладающим уникальными способностями. Вместе со своими союзниками он должен во что бы то ни стало уничтожить вражескую базу.
В ходе матча Blizzard DOTA обе команды стремятся продвинуться в направлении базы противника, сражаясь бок о бок с управляемыми компьютером существами. Базы охраняются автоматическими башнями, которые обстреливают продвигающиеся войска. Чтобы добиться победы, необходимо эти башни уничтожить. За убийство управляемых компьютером существ и других персонажей ваш герой зарабатывает опыт. С ростом уровня он развивает свои способности. Вы также зарабатываете золото: им можно оплатить улучшения и приобрести предметы, которые откроют перед вашим персонажем новые возможности и значительно увеличат его мощь. Однако у Blizzard DOTA есть несколько важных отличий от других игр в жанре DOTA. Число предметов и героев будет сравнительно небольшим, что позволит сделать их уникальными и особенными. Героев можно разделить на четыре категории: танки, использующие тяжелую броню и принимающие на себя основной удар; бойцы, наносящие противнику тяжелый урон, но при этом требующие защиты из-за своей низкой выживаемости; герои поддержки, которые могут лечить союзников, оглушать противника и использовать другие эффекты контроля; и наконец, «осадные» герои, атакующие с большого расстояния — больше, чем радиус поражения башен. Они могут уничтожать целые группировки противника. По нашей задумке, в Blizzard DOTA должны поощряться агрессивные и быстрые командные действия: в этом и состоит уникальность нашей версии DOTA. Например, башни крайне опасны для отдельных героев, но их боезапас можно истощить в процессе осады в составе команды. Кроме того, многие награды действуют на всю команду, а не на отдельного героя. Очки опыта за убийство противника начисляются всем находящимся поблизости героям, а бонусы, охраняемые враждебными монстрами и размещенные на всей территории, усиливают не только нашедшего их героя, но и всю команду. Для подбора членов команды и противников в Blizzard DOTA — как и в обычных многопользовательских играх StarCraft II — будет использоваться система рейтингов Battle.net. Так что сражаться будет по-прежнему интересно, даже когда вы уже потеряете счет победам. В атаку!