Добавлен , опубликован
Думаю, все из нас имеют на своем счету десятки (а то и сотни) карт, как больших, так и не очень. В любом случае, некоторые функции или наработки, которые пригодились когда-то, кочуют из проекта в проект. Вот, и хотелось бы посмотреть, а то и поучится у более опытных.
От ваших макросов и вплоть до библиотек, меня интересует все. Некоторые вещи слишком малы, чтобы публиковать их в ресурсах сайта, но тем не менее. Может быть, это будет полезно новичкам.
Мне, честно говоря, похвастаться нечем, но все же (cJASS):
Макросы (или экономим немного времени)
define {
	TranslateX(x, dist, angle) = (x + dist * Cos(angle * bj_DEGTORAD))
	TranslateY(y, dist, angle) = (y + dist * Sin(angle * bj_DEGTORAD))
	AngleBetween(x1,y1,x2,y2) = (bj_RADTODEG * Atan2(y2 - y1, x2 - x1))
	DistanceBetween(x1,y1,x2,y2) = SquareRoot((x1 - x2)*(x1 - x2) + (x1 - x2)*(x1 - x2))
	HP = UNIT_STATE_LIFE
    MAXHP = UNIT_STATE_MAX_LIFE
    MP = UNIT_STATE_MANA
    MAXMP = UNIT_STATE_MAX_MANA
	MageDamage(from,to,val) = UnitDamageTarget(from,to,val,false,false,ATTACK_TYPE_MAGIC,null,null)
    PhysDamage(from,to,val) = UnitDamageTarget(from,to,val,false,false,ATTACK_TYPE_CHAOS,null,null)
    PureDamage(from,to,val) = UnitDamageTarget(from,to,val,false,false,null,null,null)
}
Предметы (тут совсем просто)
// Удаляет у юнита n предметов нужного типа
void RemoveItems(unit u, int it, int count) {
    int slot=0;
    item curItem;
    while (slot<6) {
        curItem = UnitItemInSlot(u,slot);
        if (it == GetItemTypeId(curItem)) {
            RemoveItem(curItem);
            count--;
        }
        curItem=null;
        if (count == 0) {return;}
        slot++;
    }
}

// подсчет предметов нужного типа у юнита
int GetItemCount(unit u, int it) {
    int slot=0;
    int count=0;
    item curItem;
    while (slot<6) {
        curItem = UnitItemInSlot(u,slot);
        if (it == GetItemTypeId(curItem)) {
            count++;
        }
        curItem=null;
        slot++;
    }
    return count;
}

// Есть ли предмет нужного типа у юнита
bool HasItem(unit u, int it) {
    int slot=0;
    item curItem;
    while (slot<6) {
        curItem = UnitItemInSlot(u,slot);
        if (it == GetItemTypeId(curItem)) {
            return true;
        }
        curItem=null;
        slot++;
    }
    return false;
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
32
UnitAddAbility быстрее чем GetUnitAbilityLevel, если у Юнита уже есть такая способность, функция не добавит еще одну и вернет false, иначе true. Автор DracoL1ch, если хотите заняться оптимизацией кода то будет полезно.
Чтобы выдать обзор над юнитом, по мотивам дота 2 ( кроме модели Юнита ничего вокруг невидно) , можно использовать fogmodifier - модификаторы тумана быстрее раз в 10 дамми юнтов с обзором, атак же создавая 2 области 128 х 128 со смещением на 32 пл вектору движения юн тов с помощью таймера мы получим обзор чисто над моделью нужного Юнита,без мерцаний.
20
Сколько фогмодифаеров можно держать прежде чем наступит потеря фреймов?
32
Diaboliko, очень много, модификаторы тумана легкие обькты, лич писал что разница с юнитами в 10 раз.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.