XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
DeathwalkerLP

offline
Опыт: 30
Активность:
Нанести 50 % урона от силы атаки
Нужно нанести 50% от силы атаки юниту. Но вопрос как?
Старый 12.07.2013, 19:16
DioD

offline
Опыт: 45,134
Активность:
элементарное ведь, взять силу атаки юнита вычесть половину и нанести.
собственные попытки выполнить данную процедуру в студию.
Старый 12.07.2013, 19:37
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
((кат База данных атаки юнитов
((код cJass
lib DamageDB init Init uses MainStatDB, Match
{
private int array UnitID
private real array UnitDM
private int MaxUID = 0
private int array ItemID
private real array ItemDM
private int MaxIID = 0
private int array AbilID
private real array AbilDM[1000][4]
private int MaxAID = 0
private constant real DamagePerPoint = 1 for main state
define private AddUnitDB2(a,b)={UnitID[MaxUID]=a;UnitDM[MaxUID]=b;MaxUID++}
define private AddItemDB2(a,b)={ItemID[MaxIID]=a;ItemDM[MaxIID]=b;MaxIID++}
define private AddAbilDB2(a,b,c,d,e)={AbilID[MaxAID]=a;AbilDM[MaxAID][1]=b;AbilDM[MaxAID][2]=c;AbilDM[MaxAID][3]=d;​AbilDM[MaxAID][4]=e;MaxAID++}
define private AddAbilDB2(a,b,c,d)={AbilID[MaxAID]=a;AbilDM[MaxAID][1]=b;AbilDM[MaxAID][2]=c;AbilDM[MaxAID][3]=d;Ab​ilDM[MaxAID][4]=0;MaxAID++}
define private AddAbilDB2(a,b,c)={AbilID[MaxAID]=a;AbilDM[MaxAID][1]=b;AbilDM[MaxAID][2]=c;AbilDM[MaxAID][3]=0;Abil​DM[MaxAID][4]=0;MaxAID++}
define private AddAbilDB2(a,b)={AbilID[MaxAID]=a;AbilDM[MaxAID][1]=b;AbilDM[MaxAID][2]=0;AbilDM[MaxAID][3]=0;AbilDM​[MaxAID][4]=0;MaxAID++}

private void BaseSet()
{
AddUnitDB2('zero',0) id = 0
AddItemDB2('zero',0) id = 0
AddAbilDB2('zero',0,0,0,0) id = 0

AddUnitDB2('Hpal',1)
}
private int GetIID(int RCode)
{
int i = 0
loop
{
if(ItemID[i]==RCode)
{
return i
}
exit i==MaxIID
i++
}
return 0
}
private int GetAID(int RCode)
{
int i = 0
loop
{
if(AbilID[i]==RCode)
{
return i
}
exit i==MaxAID
i++
}
return 0
}
private int GetUID(int RCode)
{
int i = 0
loop
{
if(UnitID[i]==RCode)
{
return i
}
exit i==MaxUID
i++
}
return 0
}
private real GetUnitDamageEx(unit u)
{
return UnitDM[GetUID(GetUnitTypeId(u))]
}
private real GetItemDamageEx(item u)
{
return ItemDM[GetIID(GetItemTypeId(u))]
}
private real GetUnitDamageByAbils(unit u)
{
int i = 1
real s = 0
loop
{
if(GetUnitAbilityLevel(u, AbilID[i])>0)
{
s = s + AbilDM[i][GetUnitAbilityLevel(u, AbilID[i])]
}
exit i==MaxAID
i++
}
return s
}
real GetUnitDamage(unit u)
{
real dm = 0
int i = 0
real byabil = GetUnitDamageByAbils(u)
if(IsHeroUnitId(GetUnitTypeId(u)))
{
loop
{
if(UnitItemInSlot(u,i)!=null)
{
dm = dm + GetItemDamageEx(UnitItemInSlot(u,i))
}
exit i == 6
i++
}
if(GetHeroMainStat(u) == 1)
{
return dm + GetUnitDamageEx(u) + GetHeroAgi(u, true)*DamagePerPoint
}
elseif(GetHeroMainStat(u) == 2)
{
return dm + GetUnitDamageEx(u) + GetHeroStr(u, true)*DamagePerPoint
}
elseif(GetHeroMainStat(u) == 3)
{
return dm + GetUnitDamageEx(u) + GetHeroInt(u, true)*DamagePerPoint
}
}
return GetUnitDamageEx(u) + byabil
}
private void Init()
{
BaseSet()
}
}
))
))
((кат База данных характеристик героев
((код cJass
lib MainStatDB init Init
{
private int array HeroID
private int array StatID 1 = agil, 2 = str, 3 = int
private int StatIDMax =0

define private AddStatRow(a,b)={HeroID[StatIDMax]=a;StatID[StatIDMax]=b;StatIDMax++}

private void SetDB()
{
AddStatRow('Hpal',2)
}
int GetHeroMainStat(unit h)
{
int i = 0
loop
{
if(HeroID[i]==GetUnitTypeId(h))
{
return StatID[i]
}
exit i == StatIDMax
i++
}
return 0
}
private void Init()
{
SetDB()
}
}
))
))
Вызывается как
((код cJass
real GetUnitDamage(unit u)
))
Разбирайся, пояснений не будет.
Старый 12.07.2013, 19:50
DeathwalkerLP

offline
Опыт: 30
Активность:
DioD, сначала я хотел уменьшить силу (на время). И это я смог сделать. А с атакой пока не разобрался.
Clamp, спс.
DioD:
элементарное ведь, взять силу атаки юнита вычесть половину и нанести.
И как можно просто так взять силу атаки? Через триггеры такого простого решения данной проблемы нет. Ты сам пробовал? Максимум, что мне удавалось: поменять силу, ловкость или интеллект.
Старый 12.07.2013, 20:05
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,449
Активность:
Это собственно юниту криты добавить с множителем 0.50 никто не догадался?
Старый 14.07.2013, 03:49
DioD

offline
Опыт: 45,134
Активность:
нет конечно, потому что вопрос не в том как срезать половину атаки, а как нанести половину от атаки юнита, явно не цели атаки.
Старый 14.07.2013, 07:17
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,449
Активность:
DioD, а ну ладно, тогда мутите базы данных, я пасс...
Старый 14.07.2013, 14:48
ssbbssc

offline
Опыт: 16,816
Активность:
Взять способность Demolish тинкера из стандартного сражения, выставить шанс 100%, и там даже есть 3 типа войск-целей - герои, юниты, здания
для каждого можно выставить свой урон, как в плюс, так и в минус
[+] 1 пункт от Clamp: Грубо
Старый 15.07.2013, 09:36
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:23.