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

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

Ответ
 
VolkPK

offline
Опыт: 4,877
Активность:
В чем ошибка?
Подскажите где ошибка?
Сильно не пинать, джаз учить начал тока седне.
function Trig_TopCastleJazz_TC takes nothing returns boolean
if ( ( GetPlayerSlotState(Player(0)) != PLAYER_SLOT_STATE_PLAYING ) ) then
return true
endif
if ( ( GetPlayerSlotState(Player(0)) == PLAYER_SLOT_STATE_LEFT ) ) then
return true
endif
return false
endfunction
function Trig_TopCastleJazz_Conditions takes nothing returns boolean
if not Trig_TopCastleJazz_TC() then
return false
endif
if ( not ( GetOwningPlayer(GetTriggerUnit()) == Player(11) ) ) then
return false
endif
return true
endfunction
function Trig_TopCastleJazz_Actions takes nothing returns nothing
call RemoveUnit( GetTriggerUnit() )
endfunction
function InitTrig_TopCastleJazz takes nothing returns nothing
set gg_trg_TopCastleJazz = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_TopCastleJazz, gg_rct_TopCastleJazz )
call TriggerAddCondition( gg_trg_TopCastleJazz, Condition( function Trig_TopCastleJazz_Conditions ) )
call TriggerAddAction( gg_trg_TopCastleJazz, function Trig_TopCastleJazz_Actions )
endfunction
Старый 01.09.2005, 17:37
zibada

offline
Опыт: отключен
из приведенного куска кода можно только понять, что триггер убирает любого зашедшего в некий регион юнита, принадлежащего 12-му (11-му в джассе) игроку, при условии, что 1-й (0-й) игрок не находится в игре (?).
к чему такое условие, понять сложно..
  1. что этот триггер должен, по задумке, делать?
  2. что получается вместо этого?
Старый 01.09.2005, 18:03
VolkPK

offline
Опыт: 4,877
Активность:
Имменно это он и должен делать :) Но вот редактор ругается...
Старый 01.09.2005, 18:05
Шизик
это бесы!
offline
Опыт: 1,431
Активность:
запихни в какой-нибудь парсер для начала... там тебе нормальным шрифтом напишут, если ошибка дурацкая(нету скобки и т.д.)...
Старый 01.09.2005, 18:51
VolkPK

offline
Опыт: 4,877
Активность:
Ошибка тут:
call TriggerRegisterEnterRectSimple( gg_trg_TopCastleJazz, gg_rct_TopCastleJazz )
в gg_rct_TopCastleJazz не надо писать Jazz, обьясните мне, дураку что эта строчка значит, это единственная не понятная...
Старый 01.09.2005, 19:01
VolkPK

offline
Опыт: 4,877
Активность:
Как редактировать TRIGSTR_****?
Почему когда пишу так:
function Trig_DeathJazz_Remove takes nothing returns nothing
call RemoveUnit( GetEnumUnit() )
endfunction
...
call ForGroupBJ( GetUnitsInRectOfPlayer(GetPlayableMapRect(), GetOwningPlayer(GetDyingUnit())), function Trig_DeathJazz_Remove )
...
Все работает, а так:
call ForGroupBJ( GetUnitsInRectOfPlayer(GetPlayableMapRect(), GetOwningPlayer(GetDyingUnit())), call RemoveUnit( GetEnumUnit() ) )
Нет.
Старый 01.09.2005, 22:40
VolkPK

offline
Опыт: 4,877
Активность:
Скажите хотябы как изменять текст в TROGSTR_****
Старый 03.09.2005, 05:27
zibada

offline
Опыт: отключен
Цитата:
call ForGroupBJ( GetUnitsInRectOfPlayer(GetPlayableMapRect(), GetOwningPlayer(GetDyingUnit())), function Trig_DeathJazz_Remove )
...

Все работает, а так:

call ForGroupBJ( GetUnitsInRectOfPlayer(GetPlayableMapRect(), GetOwningPlayer(GetDyingUnit())), call RemoveUnit( GetEnumUnit() ) )

Нет.


потому что функции ForGroupBJ надо передать указатель на другую функцию, которая будет вызываться для каждого юнита.

Цитата:
Как редактировать TRIGSTR_****?


не используй конструкции TRIGSTR_XXX вообще, пиши обычные строки прямо в коде.
если все-таки зачем-то надо поменять их содержимое, отредактируй файл war3map.wts в архиве карты.
Старый 03.09.2005, 15:28
VolkPK

offline
Опыт: 4,877
Активность:
Так, вот и я со своими ламерскими вопросами :) Опять редактор ругается :)
Код:
function IC_AddCraft takes string class, string desc, string in, string out returns nothing
  if GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache)== "" then
    call StoreStringBJ( "1", "CraftCount", "Crafting", udg_IC_cache)
  else
    call StoreStringBJ( I2S(S2I(GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache))+1), "CraftCount", "Crafting", udg_IC_cache)
  endif
  call StoreStringBJ( class, "Class"+GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache), "Crafting", udg_IC_cache )
  call StoreStringBJ( desc, "Desc"+GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache), "Crafting", udg_IC_cache )
  call StoreStringBJ( in, "In"+GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache), "Crafting", udg_IC_cache )
  call StoreStringBJ( out, "Out"+GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache), "Crafting", udg_IC_cache )
endfunction

function IC_CraftItem takes unit Crafter, string class returns nothing
local boolean AllMath=false
local integer LoopA=1
local integer LoopB=1
local integer MathCount=0
local integer BorderCount=0
local integer array InItem
local integer array OutItem
local integer array InItemCount
local integer array OutItemCount
local integer array Border
loop
  if GetStoredStringBJ( "Class" + I2S(LoopA), "Crafting", udg_IC_cache) == class then
  exitwhen LoopA > S2I(GetStoredStringBJ("CraftCount", "Crafting", udg_IC_cache))
  set LoopB=1
  set BorderCount=0
  loop
    exitwhen LoopB > StringLength(GetStoredStringBJ( "In" + I2S(LoopA), "Crafting", udg_IC_cache))
    if SubStringBJ(GetStoredStringBJ( "In" + I2S(LoopA), "Crafting", udg_IC_cache), LoopB, LoopB)=="|" then
      set BorderCount=BorderCount+1
      set Border[BorderCount]=LoopB
      if BorderCount!=1 then
        if ModuloInteger(BorderCount, 2)==0 then
          set InItem[BorderCount-1] = S2I(SubStringBJ(GetStoredStringBJ( "In" + I2S(LoopA), "Crafting", udg_IC_cache), Border[BorderCount-1]+1, Border[BorderCount]-1))
        else
          set InItemCount[BorderCount-1] = S2I(SubStringBJ(GetStoredStringBJ( "In" + I2S(LoopA), "Crafting", udg_IC_cache), Border[BorderCount-1]+1, Border[BorderCount]-1))
        endif
      endif
    endif
    set LoopB = LoopB + 1
  endloop
  set LoopB=1
  set BorderCount=0
  loop
    exitwhen LoopB > StringLength(GetStoredStringBJ( "Out" + I2S(LoopA), "Crafting", udg_IC_cache))
    if SubStringBJ(GetStoredStringBJ( "Out" + I2S(LoopA), "Crafting", udg_IC_cache), LoopB, LoopB)=="|" then
     set BorderCount=BorderCount+1
     set Border[BorderCount]=LoopB
     if BorderCount!=1 then
       if ModuloInteger(BorderCount, 2)==0 then
       set OutItem[BorderCount-1] = S2I(SubStringBJ(GetStoredStringBJ( "Out" + I2S(LoopA), "Crafting", udg_IC_cache), Border[BorderCount-1]+1, Border[BorderCount]-1))
       else
       set OutItemCount[BorderCount-1] = S2I(SubStringBJ(GetStoredStringBJ( "Out" + I2S(LoopA), "Crafting", udg_IC_cache), Border[BorderCount-1]+1, Border[BorderCount]-1))
       endif
     endif
    endif
    set LoopB = LoopB + 1
  endloop
  set LoopB = 1
  set MathCount=0
  loop
    exitwhen LoopB>6
    if (UnitHasItemOfTypeBJ(Crafter, InItem[LoopB]) == true or InItem[LoopB] == 0) and (GetItemCharges(GetItemOfTypeFromUnitBJ(Crafter, InItem[LoopB])) >= InItemCount[LoopB] or InItemCount[LoopB] == 0) then
      set MathCount=MathCount+1
    endif
    set LoopB = LoopB + 1
  endloop
  if MathCount == 6 then
    set AllMath = true
    exitwhen true
  else
    set LoopA = LoopA + 1
  endif
  endif
endloop
if AllMath == false then
  call QuestMessageBJ(GetPlayersAll(), bj_QUESTMESSAGE_WARNING, "Ничего не сделано") 
  return false
endif
set LoopB = 1
loop
  exitwhen LoopB > 6
  if InItem[LoopB] != 0 then
    if GetItemCharges(GetItemOfTypeFromUnitBJ(Crafter, InItem[LoopB])) == 0 or GetItemCharges(GetItemOfTypeFromUnitBJ(Crafter, InItem[LoopB]))==InItemCount[LoopB] then
      call RemoveItem(GetItemOfTypeFromUnitBJ(Crafter, InItem[LoopB]))
    else
      call SetItemCharges(GetItemOfTypeFromUnitBJ(Crafter, InItem[LoopB]), GetItemCharges(GetItemOfTypeFromUnitBJ(Crafter, InItem[LoopB])) - InItemCount[LoopB])
    endif
  endif
  set LoopB = LoopB + 1
endloop
set LoopB = 1
loop
  exitwhen LoopB > 6
  if OutItem[LoopB] != 0 then
    call UnitAddItemByIdSwapped(OutItem[LoopB], Crafter)
    if OutItemCount[LoopB] != 0 then
      call SetItemCharges(GetLastCreatedItem(), OutItemCount[LoopB])
    endif
  endif
  set LoopB = LoopB + 1
endloop
if GetStoredStringBJ("Desc" + I2S(LoopA), "Crafting", udg_IC_cache) == "item" then
call QuestMessageBJ(GetPlayersAll(), bj_QUESTMESSAGE_WARNING, "Сделано:"+GetItemName(GetLastCreatedItem())) 
else
call QuestMessageBJ(GetPlayersAll(), bj_QUESTMESSAGE_WARNING, "Сделано:"+GetStoredStringBJ("Desc" + I2S(LoopA), "Crafting", udg_IC_cache)) 
endif
return true
endfunction

На смысл не сматрите, это толька самое начало :)

VolkPK добавил:
Вроде доделал, пока недобавил тока класы, 90 ашипак, где?

Отредактировано VolkPK, 20.10.2005 в 00:29.
Старый 16.10.2005, 15:47
zibada

offline
Опыт: отключен
укажи в своем коде строку, где возникает первая из ошибок.
(плюс, желательно, текст этой ошибки).
Старый 16.10.2005, 17:57
VolkPK

offline
Опыт: 4,877
Активность:
Отссутствует ' на function IC_CraftItem takes unit Crafter return nothing
PS Сейчас перезалью скрипт, исправил пару орфограшических ашипак, и нозвал нормально переменные
Старый 16.10.2005, 22:07
zibada

offline
Опыт: отключен
Код:
function IC_CraftItem takes unit Crafter returns nothing
Старый 16.10.2005, 23:10
VolkPK

offline
Опыт: 4,877
Активность:
Осталось всего 65 ашипак :) Было 90 :)
Старый 16.10.2005, 23:13
zibada

offline
Опыт: отключен
алгоритм поиска таких ошибок универсален.
смотришь строку с 1-й ошибкой, 95%, что бага или на ней, или на строчке непосредственно перед ней.
найти багу в одной строчке уже намного проще.
например, закомментировать ее нафиг и написать заново, проверяя все скобки/ключевые слова/названия.
Старый 16.10.2005, 23:28
NETRAT

offline
Опыт: 83,712
Активность:
VolkPK бугагага =) смеюсь над компилятором - скопировал себе код, обьявил кэш, то же самое выдает. Исправил "unit Crafter" на "nothing" и тут, наконец оно мне выдало истинную причину ошибки компиляции. Вместо "return" напиши "returns"

Еще ошибка:
"integer array" вместо "array integer"

Ну а потом ошибки с недостатком закрывающих скобок, да уже не стал дальше разбираться...
В-основном то опиСИски и АшиПки...
Старый 16.10.2005, 23:29
VolkPK

offline
Опыт: 4,877
Активность:
Пять ашипак :) А где там со скобками че не так?

VolkPK добавил:
Кстати у меня там с SubString все нормально? А то меня терзаю смутные сомненья :) Должно быть четыре знака пов итем и два под заряды
Старый 16.10.2005, 23:36
Raz
Click here!
offline
Опыт: 5,714
Активность:
Код:
if AllMath == false then
returns
endif
А вот тут - return.

-1.
Старый 17.10.2005, 02:25
VolkPK

offline
Опыт: 4,877
Активность:
Все баги поправил, начал было юзать, но, у меня сделано по 4 знака на предмет, а у нестандартных предметов больше! Как сделать чтоб в создании можно было использовать нестандартные и стандартные предметы?
Желательно с примером :)
Старый 17.10.2005, 22:05
VolkPK

offline
Опыт: 4,877
Активность:
Переделал немного, тесстирую, варик вылетает в главное меню и редактор ругается на Custom script: call IC_AddCraft(wood, item, |I00E|1|, |I00O|1|)
в инициализации а на Custom script: call IC_CraftItem(udg_uHero, wood)
в другом триггере, в чем дело? Сам код который выше лежит в нестандартном коде карты.
Старый 20.10.2005, 00:28
NETRAT

offline
Опыт: 83,712
Активность:
Еще бы! А что это за фигня "|I00E|1|" ? Что то я символы разделители не думаю что они вообще там кместу. Это или ' или " должны ограничивать
Старый 20.10.2005, 03:27
Ответ

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

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

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

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



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