Собственно, вот код:
код 1
function Trig_ClassificationTYPE_Actions takes nothing returns nothing
local item i = GetManipulatedItem()
local integer ii = GetItemTypeId(i)
local unit u = GetManipulatingUnit()
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real cv = GetWidgetLife(i)
local integer cslot = 0
local integer pslot = 5
local item iis
local texttag tt = CreateTextTag()
if GetUnitTypeId(GetManipulatingUnit()) != 'e000' then
loop
exitwhen cslot > pslot
set iis = UnitItemInSlot(u, cslot)
if GetWidgetLife(iis) == cv and iis != i then
call RemoveItem(i)
set i = CreateItem(ii, x, y)
if GetLocalPlayer() == GetOwningPlayer(u) then
call SetTextTagText(tt, "У героя есть предмет такого типа!", 0.02)
call SetTextTagPos(tt, x, y, 15.)
call SetTextTagColor(tt, 255, 255, 255, 255)
call SetTextTagVelocity(tt, 0.0355 * Cos(90.0 * bj_DEGTORAD), 0.0355 * Sin(90.0 * bj_DEGTORAD))
call SetTextTagPermanent(tt, false)
call SetTextTagAge(tt, 0.0)
call SetTextTagFadepoint(tt, 1.0)
call SetTextTagLifespan(tt, 1.0)
endif
endif
set cslot = cslot + 1
endloop
endif
set i = null
set u = null
set iis = null
set tt = null
endfunction
Код 2
function Trig_ClassificationLVL_Conditions takes nothing returns boolean
return GetHeroLevel(GetTriggerUnit()) < GetItemLevel(GetManipulatedItem())
endfunction
function Trig_ClassificationLVL_Actions takes nothing returns nothing
local string s = "Доступно с " + I2S(GetItemLevel(GetManipulatedItem())) + " уровня!"
local unit u = GetManipulatingUnit()
local texttag t = CreateTextTag()
local item i = GetManipulatedItem()
local integer ii = GetItemTypeId(i)
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local player p = GetOwningPlayer(GetManipulatingUnit())
local player ip = GetItemPlayer(i)
local integer id = 0
local integer in = 0
call RemoveItem(i)
set i = CreateItem(ii, x, y)
call SetItemPlayer(i, ip, false)
if GetLocalPlayer() == p then
call SetTextTagText(t, s, 0.02)
call SetTextTagPosUnit(t, u, 15)
call SetTextTagColor(t, 255, 128, 0, 255)
call SetTextTagVelocity(t, 0.0355 * Cos(90.0 * bj_DEGTORAD), 0.0355 * Sin(90.0 * bj_DEGTORAD))
call SetTextTagPermanent(t, false)
call SetTextTagAge(t, 0.0)
call SetTextTagFadepoint(t, 1.0)
call SetTextTagLifespan(t, 1.0)
endif
set u = null
set t = null
set i = null
endfunction
Прошу прощения, если с разметкой что-то не так, пока не до конца с ней разобрался, раньше сидел в ридонли.

Принятый ответ

NekoriDes, мб я тупой но зачем тебе 2 триггера с один и тем же событием?
не проще ли запихнуть всё в 1 триггер
хотелось бы увидеть и функции инициализации(создание триггера, добавление событий/условий/действий)
и код лучше кидай txt/j файлом
либо юзай это
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
13
8 лет назад
Отредактирован NekoriDes
0
Имеется в виду то, что когда поднимаешь итем, то появляется оба текстага, а не один. При этом одни из них вообще появляться не должен.
В целом ситуация выглядит так:
в инвентаре есть итем, третьего класса (WidgetLife == 3), я беру еще один такой же (с тем же виджетлайфом) и он ПОДХОДИТ мне по уровню (HeroLevel == ItemLevel), но показывает оба тексттага с варнингом.
0
4
8 лет назад
0
Было бы неплохо перед показом кода расставить все отступы, ибо порой читать сложновато.
Однако я быстренько глянул и могу сказать, что код должен работать адекватно.
Но хочу придраться к самому созданию всплывающего текста. При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру. Не проверял, действительно ли так, так что могу ошибаться.
NekoriDes:
но показывает оба тексттага с варнингом.
А чего пишет то? Случаем не "Доступно с 0 уровня"?
0
13
8 лет назад
0
DazzleFirst, Нет. Отображается все корректно, но не тогда, когда нужно.
>При каждом поднятии любого предмета будет создаваться этот текст (без записей и т.д.) и будет тупо висеть всю игру.
Проверю, фиксану если что, спасибо.
1
28
8 лет назад
1
NekoriDes, мб я тупой но зачем тебе 2 триггера с один и тем же событием?
не проще ли запихнуть всё в 1 триггер
хотелось бы увидеть и функции инициализации(создание триггера, добавление событий/условий/действий)
и код лучше кидай txt/j файлом
либо юзай это
Принятый ответ
0
13
8 лет назад
0
Забыл скинуть еще этот код.
function Trig_personal_Actions takes nothing returns nothing
    local string s = "Этот предмет принадлежит не вам!"
    local unit u = GetManipulatingUnit()
    local texttag t = CreateTextTag()
    local item i = GetManipulatedItem()
    local integer ii = GetItemTypeId(i)
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local player ip = GetItemPlayer(i)
   if ip != Player(15) then
    if GetOwningPlayer(u) != ip then
     if GetLocalPlayer() == GetOwningPlayer(u) then
        call SetTextTagText(t, s, 0.02)
        call SetTextTagPosUnit(t, u, 15)
        call SetTextTagColor(t, 255, 0, 0, 255)
        call SetTextTagVelocity(t, 0.0355 * Cos(90.0 * bj_DEGTORAD), 0.0355 * Sin(90.0 * bj_DEGTORAD))
        call SetTextTagPermanent(t, false)
        call SetTextTagAge(t, 0.0)
        call SetTextTagFadepoint(t, 1.0)
        call SetTextTagLifespan(t, 1.0)
     endif
    call RemoveItem(i)
    set i = CreateItem(ii, x, y)
    call SetItemPlayer(i, ip, false)
    endif
   endif
    set i = null
    set u = null
    set t = null
endfunction

//===========================================================================
function InitTrig_PersonalPUT takes nothing returns nothing
    set gg_trg_PersonalPUT = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_PersonalPUT, EVENT_PLAYER_UNIT_PICKUP_ITEM )
    call TriggerAddAction( gg_trg_PersonalPUT, function Trig_personal_Actions )
endfunction
Собственно, скриншоты того, что происходит:
Вот тут отображаются варнинги о том, что лвл маленький+предмет не принадлежит герою ТЫК
На деле же, он не принадлежит вообще никому.
А вот здесь отображается варнинг про тип и про не принадлежащий герою предмет. И опять же - он никому вообще не принадлежит.
Сами функции нормально работают, проблема лишь в тексттагах.
nvc123, Не знаю, я привык так, мне удобно. А это плохо?
К слову, а как код под кат засунуть?
1
28
8 лет назад
1
А это плохо?
ну давай подумаем
мы стартуем кучу потоков для того чтобы обработать 1 объект
потоки дерутся друг с другом за процессорное время
одни и те же функции и проверки вызываются по 100 раз
наверное плохо
хотя если твоя цель вызвать лаги и добавить парочку багов то наоборот хорошо
0
13
8 лет назад
0
nvc123, Понятно. Думал не влияет это. Спасибо.
То есть баг вполне может быть из-за того, что у меня все поделено на несколько триггеров?
0
28
8 лет назад
Отредактирован nvc123
0
NekoriDes, баг в том что ты не умеешь делать так чтобы поделенное на несколько триггеров работало без багов
поэтому вместо того чтобы писать фигню а потом править баги возникающие из за того что ты написал фигню я предлагаю писать сразу нормально
0
13
8 лет назад
0
Спасибо за ответы. Не закрывайте пока вопрос, пожалуйста.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.