Добавлен , опубликован
Думаю, все из нас имеют на своем счету десятки (а то и сотни) карт, как больших, так и не очень. В любом случае, некоторые функции или наработки, которые пригодились когда-то, кочуют из проекта в проект. Вот, и хотелось бы посмотреть, а то и поучится у более опытных.
От ваших макросов и вплоть до библиотек, меня интересует все. Некоторые вещи слишком малы, чтобы публиковать их в ресурсах сайта, но тем не менее. Может быть, это будет полезно новичкам.
Мне, честно говоря, похвастаться нечем, но все же (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;
}
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
2
32
6 лет назад
2
UnitAddAbility быстрее чем GetUnitAbilityLevel, если у Юнита уже есть такая способность, функция не добавит еще одну и вернет false, иначе true. Автор DracoL1ch, если хотите заняться оптимизацией кода то будет полезно.
Чтобы выдать обзор над юнитом, по мотивам дота 2 ( кроме модели Юнита ничего вокруг невидно) , можно использовать fogmodifier - модификаторы тумана быстрее раз в 10 дамми юнтов с обзором, атак же создавая 2 области 128 х 128 со смещением на 32 пл вектору движения юн тов с помощью таймера мы получим обзор чисто над моделью нужного Юнита,без мерцаний.
2
20
6 лет назад
2
Сколько фогмодифаеров можно держать прежде чем наступит потеря фреймов?
0
32
6 лет назад
0
Diaboliko, очень много, модификаторы тумана легкие обькты, лич писал что разница с юнитами в 10 раз.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.