DeathwalkerLP
offline
Опыт:
30Активность: |
Нанести 50 % урона от силы атаки
Нужно нанести 50% от силы атаки юниту. Но вопрос как? |
12.07.2013, 19:16 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
элементарное ведь, взять силу атаки юнита вычесть половину и нанести.
собственные попытки выполнить данную процедуру в студию. |
12.07.2013, 19:37 | #2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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;AbilDM[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;AbilDM[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 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeathwalkerLP
offline
Опыт:
30Активность: |
DioD, сначала я хотел уменьшить силу (на время). И это я смог сделать. А с атакой пока не разобрался. Clamp, спс. DioD: И как можно просто так взять силу атаки? Через триггеры такого простого решения данной проблемы нет. Ты сам пробовал? Максимум, что мне удавалось: поменять силу, ловкость или интеллект. |
12.07.2013, 20:05 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
Это собственно юниту криты добавить с множителем 0.50 никто не догадался? |
14.07.2013, 03:49 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
нет конечно, потому что вопрос не в том как срезать половину атаки, а как нанести половину от атаки юнита, явно не цели атаки. |
14.07.2013, 07:17 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
DioD, а ну ладно, тогда мутите базы данных, я пасс... |
14.07.2013, 14:48 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ssbbssc
offline
Опыт:
16,776Активность: |
Взять способность Demolish тинкера из стандартного сражения, выставить шанс 100%, и там даже есть 3 типа войск-целей - герои, юниты, здания для каждого можно выставить свой урон, как в плюс, так и в минус [+] 1 пункт от Clamp: Грубо
|
15.07.2013, 09:36 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|