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

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

Очень частые ошибки, выдаваемые JNGP

((центр
НА АНГЛИЙСКОМ ДОЛЖЕН БЫТЬ ПУТЬ К КАРТЕ, НА АНГЛИЙСКОМ!
))
  • "wehack.lua:437: attempt to index global 'rtc_enabled'(a nil value)" - Решение, Ещё решение
  • Так же можно убрать галочку с "Reinventing the craft"
  • При проверке через ctrl+f9 карта не запускается - а вылетает в главное меню, как этого избежать?
  • Сначала 2 раза сохраните карту обычным способом (ctrl+s), лишь потом проверяйте.
  • При первом открытии карты, после запуска редактора, появляются "Ошибки базы данных триггеров" - Решение
Вопросы связанные с этими ошибками будут караться, как флуд.
Для проверки правильности кода не следует использовать Syntax Check (он работает неправильно), просто пересохраните карту.

Пришедшим впервые

Советуем ознакомиться со всей базой статей по триггерам редактора (и не только).

Оптимальные настройки JNGP (идут по-умолчанию при установке Exp2)

После применения настроек редактор нужно перезапустить!

Работа дополнений из меню «Extensions»

Чтобы заработали пункты из меню «Extensions», необходимо предварительно сохранить карту и перезапустить редактор.

Сообщение о вирусах

Некоторые антивирусы могут сообщать о наличии резидентных программ, это так и есть, но все содержимое архива безвредно.

Закрытая тема
 
J
expert
offline
Опыт: 48,447
Активность:
Hanabishi, это все давно известно, ты в 617 посте сказал что нельяз создавать локейшены ректы, я сказал что жто не так, также думаю еще можно создавать мультиборды и диалоги, не бж которые
Старый 29.07.2009, 13:27
Hanabishi
COOL STATUS
offline
Опыт: отключен
это отчасти одна из тупостей JNGP, вексу пришло в голову поставить самоиницилизацию библиотек раньше, чем иницилизация глобалок, я так долго вешался, почему у меня таймер не заводится (функция просто тупо останавливается), вродь всё правильно было globals>create timer>start timer, а оказалось, что получается start timer>globals>create timer о_0 этш имхо
воть так поэтому большинство глобалок вручную приходится
а с мультибордами и диалогами тож какая-то фигня есть, мож и создадутся, но глючать будут, уж лучше перестраховаться
Старый 29.07.2009, 14:06
J
expert
offline
Опыт: 48,447
Активность:
во первых векс все сделал правильно
во вторых причем здесь вообще жнпг и векс?
Старый 29.07.2009, 14:09
Hanabishi
COOL STATUS
offline
Опыт: отключен
ну как, он ж JassHelper сделал?
Старый 29.07.2009, 14:16
J
expert
offline
Опыт: 48,447
Активность:
а причем здесь JassHelper?
J добавил:
ну чтобы вы голову себе не ломали что к чему, то объясню
инициализацией глобалок занимается движок вара
globals
    location GG = Location(0, 0)
endglobals
в жнпг эта строчка просто добавляется к кучи остальных в самый верх, и при выполнении функции мейн можно считать что они уже все инициализированы
т.к. по правилам пара globals endglobals должна быть одна на весь код, она помещается в самый верх, соответственно поэтому никакие функции и переменные кроме из комона и близарда ей недоступны
есть еще гуишная инициализация, это функция которая генерируется обычный WE при указе какого-нибудь начального значения переменой в редакторе переменных
в жнпг эта функция выполняется позже инициализации библиотек, но это не имеет значения, т.к. редактором переменных теперь мало кто пользуется
Старый 29.07.2009, 14:22
Hanabishi
COOL STATUS
offline
Опыт: отключен
а что получается InitGlobals вообще отпадает?
Старый 29.07.2009, 14:37
J
expert
offline
Опыт: 48,447
Активность:
J
есть еще гуишная инициализация, это функция которая генерируется обычный WE при указе какого-нибудь начального значения переменой в редакторе переменных
в жнпг эта функция выполняется позже инициализации библиотек, но это не имеет значения, т.к. редактором переменных теперь мало кто пользуется
Старый 29.07.2009, 14:38
Gam_Over
Изучаю SC2 Editor
offline
Опыт: 7,892
Активность:
может кто нить скажет почему не запускается норм карта?
Старый 30.07.2009, 09:03
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Gam_Over, кривые руки. "Норм карта" не может не запускаться.
Старый 30.07.2009, 09:54
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Написал в первом сообщении ответ на самый часто задаваемый вопрос. Красным шрифтом. Все дальнейшие обсуждения и сообщения касательно "вирусов" в архиве JassNewGenPack будут удаляться. Спасибо за понимание.
Старый 30.07.2009, 10:50
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
ктонибудь может мне подробнее рассказать о method'ах? Для примера код:
Код:
scope Fireball initializer Init
//Made by Hvo-busterkomo.

private struct Fireball
    unit u
    real count = 0
    real max
    integer level
    real cos
    real sin
endstruct

globals
    //Configuration
    private constant integer ID = 'A000'
    private constant integer DummyID = 'h000'
    private constant string Explosion = "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.  mdl"
    private constant real Interval = 0.05//This is the interval of the spell. Try to find a balance between accuracy and efficiency.
    private constant real Speed = 500
    private constant real Distance = Speed * Interval//This is the the distance the fireball moves per interval.
    private constant attacktype AT = ATTACK_TYPE_NORMAL
    private constant damagetype DT = DAMAGE_TYPE_FIRE
    private constant weapontype WT = WEAPON_TYPE_WHOKNOWS
    //Don't touch this stuff unless you know what you're doing
    private boolexpr filter
    private group Group = CreateGroup()
    private timer Tim = CreateTimer()
    private Fireball array queue
    private integer total = 0
    private player FireballOwner
endglobals

private constant function Damage takes integer level returns real
    return level * 60. + 100.
endfunction

private constant function AoE takes integer level returns real
    return level * 25. + 75.
endfunction

private function Fireball_Timer takes nothing returns nothing
    local integer i = 0
    local Fireball data
    local unit f
    local real damage
    loop
        exitwhen i >= total
        set data = queue[i]
        set data.count =data.count+1//Increases the count. Once it reaches a certain number, the fireball will explode.
        call SetUnitX(data.u, GetUnitX(data.u) + data.cos)
        call SetUnitY(data.u, GetUnitY(data.u) + data.sin)
        set FireballOwner = GetOwningPlayer(data.u)
        call GroupClear(Group)//Clears the global group.
        call GroupEnumUnitsInRange(Group, GetUnitX(data.u), GetUnitY(data.u), AoE(data.level), filter)//Groups all nearby units.
        if FirstOfGroup(Group) != null or data.count>=data.max then
            call DestroyEffect(AddSpecialEffect(Explosion, GetUnitX(data.u), GetUnitY(data.u)))//Creates the effect/
            call KillUnit(data.u)//Kills the fireball.
            set damage = Damage(data.level)
            loop
                set f = FirstOfGroup(Group)
                exitwhen f == null
                call UnitDamageTarget(data.u, f, damage, true, false, AT, DT, WT)//Damages the enemy.
                call GroupRemoveUnit(Group, f)//Removes the unit from the group
            endloop
            call data.destroy()
            set total = total - 1
            set queue[i] = queue[total]
            set i = i - 1
        endif
        set i = i + 1
    endloop
    if total == 0 then
        call PauseTimer(Tim)
    endif
    set f = null
endfunction

private function Fireball_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == ID//Makes it only fire for this spell.
endfunction

private function Fireball_Filter takes nothing returns boolean
    return GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0. and IsUnitEnemy(GetFilterUnit(), FireballOwner) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING)//Makes it only work on units (not structures) and living units.
endfunction

private function Fireball_Actions takes nothing returns nothing
    local Fireball data = Fireball.create()
    local unit u = GetTriggerUnit()//Stores the caster in a variable.
    local location l = GetSpellTargetLoc()//Stores the target location of the spell.
    local real x = GetUnitX(u)//Stores the x of the caster.
    local real y = GetUnitY(u)//Stores the y of the caster.
    local real dx = GetLocationX(l) - x
    local real dy = GetLocationY(l) - y
    local real atan2 = Atan2(dy, dx)
    set data.max = SquareRoot(dx * dx + dy * dy)/Distance//Calculates the number of executions required by the timer.
    set data.level = GetUnitAbilityLevel(u, ID)//Stores the level of the ability in a struct.
    set data.u = CreateUnit(GetOwningPlayer(u), DummyID, x, y, atan2*bj_RADTODEG)//Stores the fireball in a struct.
    set data.cos = Distance * Cos(atan2)
    set data.sin = Distance * Sin(atan2)
    call SetUnitPathing(data.u, false)//Sets the fireball's pathing to none.
    call PauseUnit(data.u, true)
    call RemoveLocation(l)//Prevents the location from leaking.
    if total == 0 then
         call TimerStart(Tim, Interval, true, function Fireball_Timer)
     endif
    set queue[total] = data
    set total = total + 1
    set u = null//local
    set l = null//variables
endfunction

private function Init takes nothing returns nothing
    local trigger t = CreateTrigger()//Creates the trigger.
    call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)//Adds the event.
    call TriggerAddCondition(t, Condition(function Fireball_Conditions))//Adds the condition.
    call TriggerAddAction(t, function Fireball_Actions)//Adds the action.
    call Preload(Explosion)//Preloads the effect, preventing it from lagging the first time it's cast.
    set filter = Filter(function Fireball_Filter)//Stores a global boolexp. Much faster than creating and destroying one all the time.
endfunction

endscope

как ето будет выглядеть на методах. переведите плиз
Старый 30.07.2009, 11:32
Hanabishi
COOL STATUS
offline
Опыт: отключен
Bee, это легко!
struct A
    method kill takes unit u returns nothing
	call KillUnit(u)
	set u = null
    endmethod
endstruct

function C takes nothing returns nothing
    local A a = A.create()
    call a.kill(<unit>)
    call A.destroy(a)
endfunction
Hanabishi добавил:
короче, method это функция внутри struct
вызывается через <struct name>.<method name>(<arguments>)
Старый 30.07.2009, 12:19
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
[b]Hanabishi[/b], а можно на месте вот этого кода вызывать одину функцию структуры в которой все это проделавается? [quote] call data.destroy()
set total = total - 1
set queue[i] = queue[total]
set i = i - 1[/quote]
Bee добавил:
struct <struct name>

 unit u
 
 method <method name> takes real x, real y returns nothing
 local <struct name> this=<struct name>.create()
 set <struct name>.u=CreateUnit(...)
 endmethod

 method <method name 2> takes <struct name> returns nothing
 call <struct name>.destroy()
 endmethod

endstruct
вот както так?
Старый 30.07.2009, 13:15
Hanabishi
COOL STATUS
offline
Опыт: отключен
конечно, просто подавай функции нужные значения
globals
    A a = A.create()
endglobals

struct A
    method SET takes integer i, integer total returns nothing
	call data.destroy()
	set queue[i] = queue[total]
    endfunction
endstruct

scope Fireball
    private function Fireball_Timer takes nothing returns nothing
    local integer i = 0
    local Fireball data
    local unit f
    local real damage
    loop
        exitwhen i >= total
        set data = queue[i]
        set data.count =data.count+1//Increases the count. Once it reaches a certain number, the fireball will explode.
        call SetUnitX(data.u, GetUnitX(data.u) + data.cos)
        call SetUnitY(data.u, GetUnitY(data.u) + data.sin)
        set FireballOwner = GetOwningPlayer(data.u)
        call GroupClear(Group)//Clears the global group.
        call GroupEnumUnitsInRange(Group, GetUnitX(data.u), GetUnitY(data.u), AoE(data.level), filter)//Groups all nearby units.
        if FirstOfGroup(Group) != null or data.count>=data.max then
            call DestroyEffect(AddSpecialEffect(Explosion, GetUnitX(data.u), GetUnitY(data.u)))//Creates the effect/
            call KillUnit(data.u)//Kills the fireball.
            set damage = Damage(data.level)
            loop
                set f = FirstOfGroup(Group)
                exitwhen f == null
                call UnitDamageTarget(data.u, f, damage, true, false, AT, DT, WT)//Damages the enemy.
                call GroupRemoveUnit(Group, f)//Removes the unit from the group
            endloop
	  //===========
            set total = total-1
	  call a.SET(i, total)
            set i = i - 1
	  //===========
        endif
        set i = i + 1
    endloop
    if total == 0 then
        call PauseTimer(Tim)
    endif
    set f = null
endfunction
endscope
Старый 30.07.2009, 13:19
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
а методы лучше чем 4 строки)? а ну спс я вроде начинаю понимать. все понимается на примерах. чтож буду вникать. еще раз спс
Старый 30.07.2009, 13:53
Hanabishi
COOL STATUS
offline
Опыт: отключен
а методы лучше чем 4 строки)?
конечно нет, но ты сам на этом примере попросил=)
Старый 30.07.2009, 14:01
Wine
ЙАААЗЬ?
offline
Опыт: 17,126
Активность:
Народ чтобы убрать лимит с танслейтов в гриморе надо везде где можно галочки поставить? Я поставил везде а джас пак стал на английском а лимит так и не убрал. В чем проблема ?=(
Старый 01.08.2009, 11:55
Hanabishi
COOL STATUS
offline
Опыт: отключен
Wine, фичи с тайлами не работают на версиях позже 5a
Старый 01.08.2009, 12:31
Wine
ЙАААЗЬ?
offline
Опыт: 17,126
Активность:
Hanabishi, ясно
Старый 01.08.2009, 12:38
Gam_Over
Изучаю SC2 Editor
offline
Опыт: 7,892
Активность:
Hellfim, самое что странное, карта запускается у всех а у меня нет. нормальная карта запускается как я понял. я и прошу помощи, как так?
Старый 02.08.2009, 11:10
Закрытая тема

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

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

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

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



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