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

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

Ответ
 
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Msey:
е 3 и 4, а именно 2. (про когти)
Не 2 и 3, а именно 1. (кольцо)
это не правельно,в любом случае тебе надо скрестить предмет если в наличии есть 2 когтей и 1 кольцо,независимо сколько там чего
Старый 14.11.2010, 10:05
Msey
????
offline
Опыт: 67,346
Активность:
Mr_KLOP, в твоей мапе вообще скрещивалось только одно кольцо и один "коготь"..
Старый 14.11.2010, 13:19
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Msey:
Mr_KLOP, в твоей мапе вообще скрещивалось только одно кольцо и один "коготь"..
там скрещивается если 2 или больше когтя,то что и надо автору
Старый 14.11.2010, 13:36
Msey
????
offline
Опыт: 67,346
Активность:
Цитата:
Сообщение от Mr_KLOP
только одно кольцо и один "коготь"..
Старый 14.11.2010, 13:44
Klop
Папа римский
offline
Опыт: 13,006
Активность:


Переделал условие на такое теперь всё нормально скрещевает

Mr_KLOP добавил:
Msey, у меня не скрещевает только 1 коготь и кольцо

Mr_KLOP добавил:
в предыдущем варианте скрещевание не происходило если при поднятии кольца у тебя небыло 2 когтей
Старый 14.11.2010, 13:50
Pray_AD
stay in c++
offline
Опыт: 7,145
Активность:
Mr_KLOP, не правильный триггер, что он вообще делает, ну точно не скрещивает 3 предмета как надо.
Pray_AD добавил:
У тебя получается скрещивание, если у героя больш 2 предметов (любых) и есть хотя бы 1 "кольцо"
Старый 14.11.2010, 13:52
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Pray_AD, всё правельно там ещё 2 триггера в карте которые считают переменную Item +1 и Item - 1 при получении или потере предмета типа Боевые когти(+15)
Вообще сделал вот так
function DeleteItem takes unit u,integer id returns nothing
    local integer i = 0
    local item Item
    loop
    exitwhen i >= 6
    set Item = UnitItemInSlot(u,i)
    if GetItemTypeId(Item) == id then
    call RemoveItem(Item)
    set i = 6
    else
    set i = i + 1
    endif
    endloop
    set Item = null
endfunction

function Items takes nothing returns nothing
    local integer i = 0
    local item Item = null
    local integer q1 = 0
    local integer q2 = 0
    loop
      exitwhen i == 6
         set Item = UnitItemInSlot(GetManipulatingUnit(),i)
         if GetItemTypeId(Item) == 'ratf' then
           set q1 = q1 + 1
         elseif GetItemTypeId(Item) == 'rde4' then
           set q2 = q2 + 1
         endif
      set i = i + 1
    endloop
    set i = 0
    if q1 >=2 and q2 >= 1 then
    call DeleteItem(GetManipulatingUnit(),'ratf')
    call DeleteItem(GetManipulatingUnit(),'ratf')
    call DeleteItem(GetManipulatingUnit(),'rde4')
    set Item = CreateItem('desc', GetUnitX(GetManipulatingUnit()), GetUnitY(GetManipulatingUnit()))
    call UnitAddItem(GetManipulatingUnit(),Item)
    endif
    set Item = null
endfunction

//===========================================================================
function InitTrig_Items takes nothing returns nothing
    local integer i = 0
    local trigger t = CreateTrigger(  )
    loop
    exitwhen i == 16
    call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_PICKUP_ITEM,null)
    set i = i + 1
    endloop
    call TriggerAddAction(t, function Items)
    set t = null
endfunction
Старый 14.11.2010, 14:39
Pray_AD
stay in c++
offline
Опыт: 7,145
Активность:
Тогда другой разговор.
Старый 14.11.2010, 14:42
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Итак потратил время и сделал такую вещь для автора,также если норм человек скажет что утечек не обнаружено и код может кому то пригодиться я его выкину в библиотеку функций
Код скопировать в нестандартный код карты
function DeleteItem takes unit u,integer id returns nothing
    local integer i = 0
    local item Item
    loop
    exitwhen i >= 6
    set Item = UnitItemInSlot(u,i)
    if GetItemTypeId(Item) == id then
    call RemoveItem(Item)
    set i = 6
    else
    set i = i + 1
    endif
    endloop
    set Item = null
    set u = null
endfunction

function CheckItem takes unit u,integer id,integer q returns boolean
    local integer s = 0
    local integer i = 0
    local item Item
    loop
      exitwhen i == 6
         set Item = UnitItemInSlot(u,i)
         if GetItemTypeId(Item) == id then
           set s = s + 1
         endif
      set i = i + 1
    endloop
    set Item = null
    set u = null
    if s == q then
    return true
    else
    return false
    endif
endfunction

function Items takes unit u,integer q,integer id1,integer id2,integer id3,integer id4,integer id5,integer id6,integer c returns nothing
    local integer i = 0
    local integer a = 0
    local integer ide = 0
    local integer array id
    local item Item = null
    local boolean array b
    local boolean b2 = true
    set id[0] = id1
    set id[1] = id2
    set id[2] = id3
    set id[3] = id4
    set id[4] = id5
    set id[5] = id6
    loop
      exitwhen i == q - 1
         if id[i] == id[i+1] then
         set a = a + 1
         set ide = id[i]
         endif
      set i = i + 1
    endloop
    if a != 0 then 
    set b2 = CheckItem(u,ide,a+1)
    endif
    set i = 0
    loop
      exitwhen i == 6
         set Item = UnitItemInSlot(u,i)
         set a = 0
         loop
         exitwhen a==q
         if Item != null and GetItemTypeId(Item) == id[a] then
         set b[a] = true
         endif
         set a = a + 1
         endloop
      set i = i + 1
    endloop
    set a = 0
    set i = 0
    loop
      exitwhen i == q
         if b[i] == true then
         set a = a + 1
         endif
      set i = i + 1
    endloop
    if a == q and b2==true then
    set i = 0
    loop
    exitwhen i == q
    call DeleteItem(u,id[i])
    set i = i + 1
    endloop
    set Item = CreateItem(c, GetUnitX(u), GetUnitY(u))
    call UnitAddItem(u,Item)
    endif
    set u = null
    set Item = null
endfunction
Пример использования
Событие - A unit получает предмет
Дейсвие - CS: call Items(GetManipulatingUnit(),4,'rde4','ratf','ratf','ratf',0,0,'desc')
Где
GetManipulatingUnit() - Юнит получивший предмет
4 - Кол-во скрещеваемых предметов
'rde4','ratf','ratf','ratf',0,0, - Айди предметов указывать 6 штук если нужно 4 то указываем 4 и ставим 2 нуля(если 3 то 'rde4','ratf','ratf',0,0,0)
Думаю понятно
Примечание:
-Одинаковые айди указывать можно только 1 раз тоесть нельзя указать 2 таких и 2 таких,только какойто 1 хоть 5 раз
-Айди предметов обязательно должны быть впереди нулей
'desc' - Последний параметр Айди предмета который будет создан

Отредактировано Mr_KLOP, 14.11.2010 в 16:20.
Старый 14.11.2010, 15:50
MpW

offline
Опыт: 50,016
Активность:
Мне кажется администрации нужно в FAQ написать про скрещивание одиннаковых предметов а то много вопросов задается по этого поводу )
Старый 14.11.2010, 19:24
BK.Jugg
террорист из КиП
offline
Опыт: 27,066
Активность:
а ты хоть читал сам фак то? О_О
там написано, читаем внимательнее.
Старый 14.11.2010, 19:33
MpW

offline
Опыт: 50,016
Активность:
А там про скрещивание, а не про скрещивание одиннаковых предметов
Старый 14.11.2010, 19:41
darkkolor

offline
Опыт: 162
Активность:
вобще те тригера они крестят ровно 2 меча и свиток! и не как в прошлый раз и 1 меч и свиток а именно так! но тут проблема оно крестит только 1 раз предмет ! а второй раз не хочет крестит как исправить? ато там сделали а эту проблему не учли)

Отредактировано darkkolor, 15.11.2010 в 21:40.
Старый 15.11.2010, 18:00
Ответ

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

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

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

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



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