Сейчас 09:47:07 Суббота, 18 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Помогите найти ошибку.
Помогите найти ошибку.
SreziДата: Понедельник, 01 Октября 2012, 17:21:29 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Code
globals
group GROUP_BOSS=CreateGroup()
unit BU
endglobals

Code
function FB6act takes nothing returns nothing
       local group g    = CreateGroup()
       local unit u     = null
       local real an    = LoadReal(udg_Hash,GetHandleId(GetExpiredTimer()),0)
       local integer i  = LoadInteger(udg_Hash,GetHandleId(GetExpiredTimer()),1)
       local real x     = LoadReal(udg_Hash,GetHandleId(GetExpiredTimer()),2)
       local real y     = LoadReal(udg_Hash,GetHandleId(GetExpiredTimer()),3)
       if i < 20 then
           set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD)
           set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)
           call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\Impale\\ImpaleMissTarget.mdl",x,y))
           call GroupEnumUnitsInRange(g,x,y,150,null)
           loop
               set u=FirstOfGroup(g)
               if IsUnitEnemy(u, GetOwningPlayer(BU)) == true and GetUnitState(u,UNIT_STATE_LIFE) > 0 and IsUnitInGroup(u,GROUP_BOSS)==false then
                   call GroupAddUnit(GROUP_BOSS,u)
                   call UnitDamageTarget(BU, u,GetUnitState(u,UNIT_STATE_MAX_LIFE)*0.15, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
               endif
               call GroupRemoveUnit(g,u)
               exitwhen u==null
           endloop
           call SaveInteger(udg_Hash,GetHandleId(GetExpiredTimer()),1,i+1)
       endif
       if i==20 then
           call GroupClear(GROUP_BOSS)
           call PauseTimer(GetExpiredTimer())
           call DestroyTimer(GetExpiredTimer())
           call FlushChildHashtable(udg_Hash,GetHandleId(GetExpiredTimer()))
       endif
       call DestroyGroup(g)
       set g = null
       set u = null
endfunction


Code
function FB6 takes unit cs,unit tr returns nothing
       local timer t = CreateTimer()
       set BU=cs
       call SaveReal(udg_Hash,GetHandleId(t),0,GetUnitFacing(cs))
       call SaveInteger(udg_Hash,GetHandleId(t),1,1)
       call SaveReal(udg_Hash,GetHandleId(t),2,GetUnitX(cs))
       call SaveReal(udg_Hash,GetHandleId(t),3,GetUnitY(cs))
       call TimerStart(t,0.05,true,function FB6act)
       set t = null
endfunction


Вот "Пронзающая смерть" сделана триггерно. Но почему то не работает, точнее не создется эффект в нужной точке. Если не трудно, помогите найти ошибку. Может я где-то ошибся. Заранее спасибо


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.


Сообщение отредактировал Srezi - Понедельник, 01 Октября 2012, 17:29:05
 

[SeKtOR]Дата: Понедельник, 01 Октября 2012, 17:47:23 | Сообщение # 2
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Code
if IsUnitEnemy(u, GetOwningPlayer(BU)) == true and GetUnitState(u,UNIT_STATE_LIFE) > 0 and IsUnitInGroup(u,GROUP_BOSS)==false then

Лучше на:
Code
if IsUnitEnemy(u, GetOwningPlayer(BU)) and GetWidgetLife(u) > .405 and not IsUnitInGroup(u,GROUP_BOSS) then




Сообщение отредактировал [SeKtOR] - Понедельник, 01 Октября 2012, 17:47:38
 

SreziДата: Понедельник, 01 Октября 2012, 17:49:04 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Quote (|SeKtOR|)
Codeif IsUnitEnemy(u, GetOwningPlayer(BU)) == true and GetUnitState(u,UNIT_STATE_LIFE) > 0 and IsUnitInGroup(u,GROUP_BOSS)==false then Лучше на: Codeif IsUnitEnemy(u, GetOwningPlayer(BU)) and GetWidgetLife(u) > .405 and not IsUnitInGroup(u,GROUP_BOSS) then


Это элементы оптимизации, а не ошибка. Ищи дальше


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.


Сообщение отредактировал Srezi - Понедельник, 01 Октября 2012, 17:52:48
 

[DS]Дата: Понедельник, 01 Октября 2012, 17:52:54 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
угол фейса не сохраняй, а там же находи и ставь, и все ок будет

 

SreziДата: Понедельник, 01 Октября 2012, 17:56:25 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Quote (|DS|)
угол фейса не сохраняй, а там же находи и ставь, и все ок будет


Во время применения абилки босс вертиться, поэтому угол будет меняться. Вот и сохранил


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.
 

[DS]Дата: Понедельник, 01 Октября 2012, 18:00:27 | Сообщение # 6
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
я тоже с этим сталкивался, не будет менятся угол

 

SirNikolasДата: Понедельник, 01 Октября 2012, 18:01:17 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD)
set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)
Не плюсовать надо, а задавать.
Либо плюсовать без учета значения i.

Добавлено (01 Октября 2012, 18:01:17)
---------------------------------------------
А по-хорошему, код нуждается в оптимизации.


 

[DS]Дата: Понедельник, 01 Октября 2012, 18:01:42 | Сообщение # 8
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
или..стоп, кажись я совсем по-другому делал спеллы

 

SreziДата: Понедельник, 01 Октября 2012, 18:02:33 | Сообщение # 9
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Quote (SirNikolas)
set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)Не плюсовать надо, а задавать. Либо плюсовать без учета значения i.Добавлено (01 Октября 2012, 18:01:17)---------------------------------------------А по-хорошему, код нуждается в оптимизации.


Для начало его нужно написать, потом уже я буду его оптимизировать.


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.
 

SirNikolasДата: Понедельник, 01 Октября 2012, 18:04:03 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (SirNikolas)
set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD)
set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)
Так расстояние между эффектами будет увеличиваться в геометрической прогрессии, а не в арифметической.


 

SreziДата: Понедельник, 01 Октября 2012, 18:05:24 | Сообщение # 11
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Ну и что тогда делать, подскажи

Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.
 

[DS]Дата: Понедельник, 01 Октября 2012, 18:07:33 | Сообщение # 12
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
>Не плюсовать надо, а задавать.

 

[SeKtOR]Дата: Понедельник, 01 Октября 2012, 18:09:47 | Сообщение # 13
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Я незнаю, что я нашайтанил, но поменяв 40 на 250, на мой взгляд одинаковое расстояние между "шипами" стало(в сравнение с оригиналом)

 

SreziДата: Понедельник, 01 Октября 2012, 18:21:39 | Сообщение # 14
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Quote (|DS|)
>Не плюсовать надо, а задавать.


Подробнее.


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.
 

SirNikolasДата: Понедельник, 01 Октября 2012, 18:33:27 | Сообщение # 15
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (SirNikolas)
set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD)
set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)

Добавлено (01 Октября 2012, 18:33:27)
---------------------------------------------

Quote (SirNikolas)
Либо плюсовать без учета значения i.
Quote (SirNikolas)
set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD)
set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)


 

SreziДата: Понедельник, 01 Октября 2012, 18:36:51 | Сообщение # 16
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
Quote (SirNikolas)
set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)Добавлено (01 Октября 2012, 18:33:27)---------------------------------------------Quote (SirNikolas)Либо плюсовать без учета значения i.Quote (SirNikolas)set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)


Это же не "Цикл" , это таймер. И значения x,y. Не обновляются. Они сохранены и всегда одинаковые, следовательно нужно делать вот так >

x=x+число*Cos(угол*бж)
y=y+число*Sin(угол*бж)


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.
 

[DS]Дата: Понедельник, 01 Октября 2012, 18:39:49 | Сообщение # 17
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
>Это же не "Цикл" , это таймер. И значения x,y. Не обновляются
40*i?
i+i?


 

SreziДата: Понедельник, 01 Октября 2012, 18:41:58 | Сообщение # 18
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
С триггером все нормально было.

Просто я не указал переменную BU и cs, из-за этого была ошибка.

Всем спасибо.


Нет места чести на войне,
Враг церемониться не будет,
Убей его любым путём,
Ведь победителей не судят.


Сообщение отредактировал Srezi - Понедельник, 01 Октября 2012, 18:49:38
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Помогите найти ошибку.
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz