30

» WarCraft 3 / Как отключить запрет на строительство?

Поставил галки, перезапустил, но оно не работает...
Забыл сказать, там немного бубна нужно:
  • Сохраняем карту, чтоб небыло * в названии
  • Выставляем галки в Customize Tile Pathability, и жмём OK
  • Ничего не трогаем и закрываем JNGP
  • ...
  • PROFIT!
Загруженные файлы
30

» WarCraft 3 / Подскажите как проще всего написать рандом >покупку< героя

LordDracula:
можно через массив. по индексу от 1 до количество героев записывать их id, и через функцию рандомного числа для массива получать героя
Это в том случае, если при покупке герой не исчезает.
Darknessay:
То есть априори придется записывать много каки, никак по легкому зарандомить покупку нельзя?
Можете вывести сообщение "закройте глаза и тыкайте наугад в клаву, пока не услышите звук"
30

» WarCraft 3 / Союз Рас

constant native GetPlayerAlliance takes player sourcePlayer, player otherPlayer, alliancetype whichAllianceSetting returns boolean
constant native GetPlayerRace takes player whichPlayer returns race
30

» WarCraft 3 / Конверт

Принятый ответ
MATRITSA:
set IsEnemyUnit = GetFilter Unit() == Target как я мог объяснить это когда думал что эта не логичиская а юнит переменая будет
constant native IsUnitEnemy takes unit whichUnit, player whichPlayer returns boolean
constant native GetFilterUnit takes nothing returns unit
Сложно в Function List заглянуть?
30

» WarCraft 3 / Конверт

Ну тип можно на хендл фильтра чтонибудь записать
На любой хэндл можно что угодно записать, но мой внутренний экстрасенс спит и суть вопроса я не уловил.
30

» WarCraft 3 / StringFunctions

К тому же ещё нужно не забыть о косяках пользовательского ввода и заменить двойные пробелы
StringReplaceRepeated("old-----old---old-------old","-") -> string // old-old-old-old
Только с именами функций всётаки подумать прийдётся
pro100master:
почему смотри
string s1 = StringExplodeSearch(",", "1,2,3,4,5,6", 0); Сработает 1 раз цикл
string s2 = StringExplodeSearch(",", "1,2,3,4,5,6", 3); из кеша
string s3 = StringExplodeSearch(",", "6,5,4,3,2,1", 0); новый инпут значит обнуляем кеш и проходим цикл
string s4 = StringExplodeSearch(",", "1,2,3,4,5,6", 5); из кеша
Пользователь затупил, а виновата библиотека))
И ещё в документации это отразить нужно будет(
30

» WarCraft 3 / StringFunctions

он и обнуляет если инпут был другой задан
string s1 = StringExplodeSearch(",", "1,2,3,4,5,6", 1);
string s2 = StringExplodeSearch(",", "7,8,9,10,11,12", 2);
string s3 = StringExplodeSearch(",", "1,2,3,4,5,6", 3);
И тут нам уже нужны двумерные массивы и хранение строки по хэшу. Проще пробежать по строке на каждый вызов и забить.
30

» WarCraft 3 / StringFunctions

и главное строка кешировать чтобы повторно цикл не проходить если надо получить параметры несколько раз =)
Экономия на спичках во время пожара. Проще несколько раз по строке пробежать, чем следить за кучей массивов и заставлять людей их обнулять за ненадобностью.
string s1 = StringExplodeSearch(...);
string s2 = StringExplodeSearch(...);
// И приехали
30

» WarCraft 3 / StringFunctions

а где функция для получение нужного параметра например "text,text,new" каждый запятой или указаный знак возврашали массив explode(",", "text,text,new", 2) вернет new нумерация с 0
Хорошая идея, жаль нельзя массивы возвращать. Добавить неложно, но как функции назвать то?
StringExplodeCount(string input, string delimiter) -> integer
StringExplodeParam(string input, string delimiter, integer number) -> string
30

» WarCraft 3 / Invasion of the dead v.0.1

Если вас раздражает реклама то сделаю так, что написав в чате команду он отключит её для вас.
А можно комманду в чате, которая русский язык включит?
И выше уже сказано, полурабочая карта врятли может заинтересовать.
30

» WarCraft 3 / Invasion of the dead v.0.1

Не думал что так всё сложно
Ага, ещё например игра спамит предложением нажать ф9 и перейти в группу, а квэсты неактивны
30

» WarCraft 3 / Invasion of the dead v.0.1

он ещё сырой и какие фишки могут появится?
Довести хотя-бы эту бэту до ума. Я например еле таверну с героями нашёл.
30

» WarCraft 3 / StringFunctions

pro100master, или проще, сделать комманду -players и вывести номера-ники игроков)
30

» WarCraft 3 / Invasion of the dead v.0.1

Но уже есть beta версия карты в которой вы можете выбрать из 5-ти героев и небольшого списка предметов что бы пройти 10 волн и одного босса.
У меня ниодна волна не появилась.
Версия карты: v.0.01 (*OBT)
тоесть это просто заготовка для будущей карты с трэйлером?
30

» WarCraft 3 / StringFunctions

В общем нужно создавать новые экземпляры способностей
Вещь полезная, но не люблю мемхак, сейчас вот думаю, как строку в игрока конвертировать, чтоб ловило 0, red, красный и в идеале начальные уникальные символы ника игрока)
30

» WarCraft 3 / ZinC: DefaultTextTag

Это уже было где -то
Сам видел множество наработок для этого, но ниодна не возвращала созданный текстаг. А тут например
local texttag tt = DefaultTextTag(0, GetTriggerUnit(), "+10 золота")
call SetTextTagVisibility(tt, GetOwning(GetTriggerUnit()) == GetLocalPlayer())
// call SetTextTagVisibility(tt, /* Любое ваше условие, если стандартное не нравится */)

tt = null
30

» WarCraft 3 / StringFunctions

Вот теперь реально полезная наработка
Да я просто понемногу реализую недостающий функционал, чтоб потом один раз импортировать и забыть)
А сделать CreateNewAbilityForUnit с изменением параметров способности сможешь?
Как оно работать то должно?
30

» WarCraft 3 / Вопрос о texttag

HandleCounter, нашел на xgm
Я себе попроще сделал
//! zinc
library HandleCounter {
    leaderboard HandleBoard;
    
    function onInit(){
        TimerStart(CreateTimer(), 0, false, function () {
            HandleBoard = CreateLeaderboard();
            LeaderboardSetLabel(HandleBoard, "Handle Counter");
            PlayerSetLeaderboard(GetLocalPlayer(), HandleBoard);
            LeaderboardDisplay(HandleBoard, true);
            LeaderboardAddItem(HandleBoard, "Handles", 0, Player(0));
            LeaderboardSetSizeByItemCount(HandleBoard, 1);
            TimerStart(GetExpiredTimer(), 0.05, true, function(){            
                integer id, i = 0;
                location P[];
                real result = 0;
                
                while(i < 50){
                    i = i + 1;
                    P[i] = Location(0, 0);
                    id = GetHandleId(P[i]);
                    result = result + (id - 0x100000);
                }
                result = result/i-i/2 ;
                
                while(i >= 0){
                    RemoveLocation(P[i]);
                    P[i] = null;
                    i = i - 1;
                } 
                
                LeaderboardSetItemValue(HandleBoard, 0, R2I(result));
            });
        });
    }
}
//! endzinc
мой карта ни 1 утечка не утекает =)
Что впринципе можно о любой melee карте сказать))
знающим людям это не нужно т.к. они и так знают что и где утекает
Я както спросонья учудил
real x = GetLocationX(GetSpellTargetLoc());
real y = GetLocationY(GetSpellTargetLoc());
И если бы не счётчик, то не зметил бы 2 утекающих хэндла)
30

» WarCraft 3 / Сборный кусок арка из нескольких декораций...

Принятый ответ
Это же высокая торцевая стена. С разным масштабом и наклоном.
Doodads\Cityscape\Structures\City_LowWall_TallEndCap\City_LowWall_TallEndCap
30

» WarCraft 3 / Нанесение урона в момент попадания по цели

Суть вот в чём:
Триггер на отлов урона будет срабатывать при наличии нестандартного баффа способности, будет его снимать и через дамми накладывать обычный бафф, а также наносить дополнительный урон за счёт Силы героя;
События триггера на отлов урона будут добавляться только на цели геройской способности Молот бурь (нестандартный), чтобы события для одного юнита не создавались дважды и соответственно триггер не срабатывал дважды, будем заносить цели способности в группу и не повторять создание события для тех, кто есть в группе;
Если же юнит из группы умрёт, но он не герой, который может воскреснуть, то удалим его из группы.
Правильный ответ был здесь
UrsaBoss:
Создаешь дамми, сохраняешь в SetUnitUserData нужный урон и заставляешь его кидать молоток в цель.
Цель получила урон, проверяешь является ли атакующий тем самым дамми, берешь урон из GetUnitUserData и наносишь его цели
Перед тем как кидать молоток, зарегистрируй событие на получение урона для цели.
И в самом получении урона делай проверку чтобы урон был больше 0.00 (т.к могут прилетать ложные срабатывания триггера)
30

» WarCraft 3 / CustomChatEvent

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

А честно, если мне позволят опубликовать вещи из примеров с зависимостью от этой библиотеки, то я вам не только это сделаю
Bergi_Bear:
createunit Hpal - создаст юнита это гарвкода
createitem Iaif - создаст предмет если такое есть, иначе ошибка
addability A000 - добавит способность для выбранного юнита
removeability Acid - удалит способность у выбранного юнита
В планах, вот эту штуку переписать))