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

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

Ответ
 
agentex

offline
Опыт: 34,834
Активность:
Вот функция складывания зарядов, если еще надо:
Код:
function GetItemQ takes unit u, integer itemId returns integer
local integer i = 1
local integer ii = 0
loop
if GetItemTypeId(UnitItemInSlotBJ(u,i)) == itemId then
 set ii = ii+1
endif
set i=i+1
exitwhen i == 7
endloop
return ii
set ii = 0
set i = 0
set u = null
set itemId = 0
return 0
endfunction

function ChargesAmount takes unit u, item it, boolean Taken returns nothing
local integer i = 1
local item OldItem
local item NewItem = it
if (GetItemQ(u,GetItemTypeId(NewItem)) == 1) and (Taken == false) then
set OldItem = GetItemOfTypeFromUnitBJ(u,GetItemTypeId(NewItem))
call SetItemCharges(OldItem,(GetItemCharges(OldItem)+GetItemCharges(NewItem)))
call RemoveItem(NewItem)
endif
if (GetItemQ(u,GetItemTypeId(NewItem)) == 2) and (Taken ==true) then
loop
if (GetItemTypeId(UnitItemInSlotBJ(u,i)) == GetItemTypeId(NewItem)) and (UnitItemInSlotBJ(u,i) != NewItem)  then
set OldItem = UnitItemInSlotBJ(u,i)
endif
set i=i+1
exitwhen i == 7
endloop
call SetItemCharges(OldItem,(GetItemCharges(OldItem)+GetItemCharges(NewItem)))
call RemoveItem(NewItem)
endif
set i = 0
set OldItem = null
set NewItem = null
endfunction


GetItemQ возвращает количество предметов типа ItemId, нужна для основной функции
прим. аргумент Taken нужно ставить true если событие юнит получает предмет. false это для отдачи приказа взять предмет (сработает даже при заполненном инве)
Старый 16.08.2008, 01:28
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
Код:
set ii = 0
set i = 0
set u = null
set itemId = 0
return 0
Это лишнее ибо
1. После return не исполнится.
2. Integer и аргументы утечек не дают.

Код:
function ChargesAmount takes unit u, item it returns nothing
    local integer i = 1
    local item OldItem
    loop
        set OldItem = UnitItemInSlotBJ(u,i)
        exitwhen (GetItemTypeId(OldItem) == GetItemTypeId(it)) and (OldItem != it)
        set i=i+1
        exitwhen i == 7
    endloop
    if i < 7 then
        call SetItemCharges(OldItem,(GetItemCharges(OldItem)+GetItemCharges(it)))
        call RemoveItem(it)
    endif
    set OldItem = null
endfunction

Так лучше?
И флаг лишний не нужен.
Старый 16.08.2008, 09:29
vervolk

offline
Опыт: 187
Активность:
Как Убрать всех воинов из определённой области?
Старый 16.08.2008, 22:38
DoDo
Kicked by dk
offline
Опыт: 4,178
Активность:
Выделить и удолить. :):
Старый 16.08.2008, 22:40
vervolk

offline
Опыт: 187
Активность:
Забыл уточнить тригерно)
Старый 17.08.2008, 22:08
agentex

offline
Опыт: 34,834
Активность:
Sebra да знаю ваще та функция давно не тру т.к. я писал ее гдет год назад а тогда я оч плохо представлял себе структуру жасс)
вот переделал
Код:
function ChargesAdding takes unit u, item it returns nothing
local integer i = 0
 loop
 exitwhen i > 5
   if GetItemTypeId(UnitItemInSlot(u, i)) == GetItemTypeId(it) and UnitItemInSlot(u, i) != it then
     call SetItemCharges(UnitItemInSlot(u, i), (GetItemCharges(it) + GetItemCharges(UnitItemInSlot(u, i))))
     call RemoveItem(it)
     set i = 5
   endif
 set i = i + 1
 endloop
set i = 0
endfunction

^юзать с событием юнит получает предмет
кстать я пытался отловить приказ и итемид при продажи предмета, ток вот если золота \свободных слотов нет, приказ не успевает пройти.. а жаль, так хотелось сделать сложение при покупке.

agentex добавил:
хм а че переносятся строки то =\
Старый 17.08.2008, 22:30
vervolk

offline
Опыт: 187
Активность:
Ну так как тригерно удалить войнов из области, прост ндоедает удалять всех поочереде.
Старый 17.08.2008, 22:41
agentex

offline
Опыт: 34,834
Активность:
Sebra а у меня и лишней локалки olditem терь нету)

agentex добавил:
vervolk те надо всех юнитов ваще? или с условиями?
Старый 17.08.2008, 22:43
vervolk

offline
Опыт: 187
Активность:
нет именно в области какойнить например шла война победили Альянс и потом войска Альянса исчезают из области
Старый 17.08.2008, 22:52
Chester
Best for you!
offline
Опыт: 5,702
Активность:
Pick every unit in твоя область and do actions
Kill(Picked Unit)
Старый 17.08.2008, 23:02
vervolk

offline
Опыт: 187
Активность:
спасиб)
Старый 17.08.2008, 23:12
vervolk

offline
Опыт: 187
Активность:
Есть вопрос как сделать предмет ну скажем Зелье Ловкости при его использовании на 60 сек даёться 10 ловкости, какую способность надо поставить предмету?
Старый 22.08.2008, 14:30
V1ctor1ous

offline
Опыт: 23,781
Активность:
Просто способность активную пустышку,и тригерно пиши нач каст аб пустышки,добавить х статов,вэйт 60 сек,убрать х статов.
Старый 22.08.2008, 14:45
vervolk

offline
Опыт: 187
Активность:
да спасибо)
Старый 22.08.2008, 14:50
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
Sebra а у меня и лишней локалки olditem терь нету)
А integer обнуляешь.
Попробуем улучшить...
Код:
function ChargesAdding takes unit u, item it returns nothing
local integer i = 0
 if GetItemCharges(it)<1 then // not a potion
  return
 endif
 loop
  if GetItemTypeId(UnitItemInSlot(u, i)) == GetItemTypeId(it) and UnitItemInSlot(u, i) != it then
   call SetItemCharges(UnitItemInSlot(u,i),(GetItemCharges(it)+GetItemCharges(UnitItemIn  Slot(u,i))))
     call RemoveItem(it)
     return
   endif
 exitwhen i > 4
 set i = i + 1
 endloop
endfunction

Цитата:
кстать я пытался отловить приказ и итемид при продажи предмета, ток вот если золота \свободных слотов нет, приказ не успевает пройти.. а жаль, так хотелось сделать сложение при покупке.

В доте для этого, и чтобы продавать 12 предметов, продаются юниты.
На земле лежат руны.
Каждый предмет имеет несколько вариантов.
Старый 23.08.2008, 14:24
agentex

offline
Опыт: 34,834
Активность:
ну можно не обнулять че дальше
if GetItemCharges(it)<1 then // not a potion
return
это совсем не обязательно делать и так все работет..
Цитата:
В доте для этого, и чтобы продавать 12 предметов, продаются юниты.
На земле лежат руны.
Каждый предмет имеет несколько вариантов.

бред какой :O
Старый 23.08.2008, 14:44
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
if GetItemCharges(it)<1 then // not a potion
return
это совсем не обязательно делать и так все работет..

Возьмёшь два щита - один удалит.

Цитата:
бред какой :O

Бред не бред, но работает.
Ты же не смог сделать покупку при полном инвентаре, а они смогли.

Ты, кажется в теме про блинк призывал отслеживать приказы. Так вот, приказы - команды, а не события. С ними не так просто.
Старый 23.08.2008, 15:08
agentex

offline
Опыт: 34,834
Активность:
ну у них вообще начиная с 6.53 какаято своя система предметов
Цитата:
Возьмёшь два щита - один удалит.

а поставить в триггере условие слабо?
Старый 23.08.2008, 15:48
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
ну у них вообще начиная с 6.53 какаято своя система предметов

Именно эта, именно для этого.
Цитата:
а поставить в триггере условие слабо?

Вообще вся функция прямо в триггер просится.
И это условие тоже.
Старый 23.08.2008, 16:00
agentex

offline
Опыт: 34,834
Активность:
хз че там куда просится, а у меня все по простому: тригер на гуи с условием а в действиях вызов этой ф-ии
Старый 23.08.2008, 16:55
Ответ

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

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

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

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



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