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

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

Ответ
 
влад10011

offline
Опыт: 2,337
Активность:
Стек предметов
Я хотел сделать что то типо здания, которое производит ресурсы и автоматически передаёт их в ближайший склад в виде предмета(это я сделал).
Но у меня возникла проблема, что при получении ресурса,он либо не хочет стекаться с другими предметами, либо вообще не добавляется на склад(ресурс появляется окало здания которое его производило)
» Код

Код:
library Tovarrrr initializer InitTovar {
define {
private Tovar=udg_TovarArt
private TU=udg_TovarUnit
private CT=udg_CountTovars
private TB=udg_TupeBuild
private ifloop=exitwhen
private GetX(u)=GetUnitX(u)
private GetY(u)=GetUnitY(u)
private void=nothing
private int=integer
 }

globals
private real X,Y
private unit UnitDist
private int CountEnumUnit=0,Count=1
private unit array Unit
//private hashtable Hash=InitHashtable()
endglobals

private boolean GetUnitDeadd(unit u) {
return GetUnitState(u, UNIT_STATE_LIFE) <= 0.0405
}

/*Автор функции ниже youtube*/
private boolean DistUnit() {
unit u=GetFilterUnit()
    if GetWidgetLife(u)>0.405 and GetUnitTypeId(u)==TB
        real x,y,d,x1,y1,d1
        if UnitDist==null
        UnitDist=u
        endif
        x=GetUnitX(u)
        y=GetUnitY(u)
        x1=GetUnitX(UnitDist)
        y1=GetUnitY(UnitDist)
        d=SquareRoot((x-X)*(x-X)+(y-Y)*(y-Y))
        d1=SquareRoot((x1-X)*(x1-X)+(y1-Y)*(y1-Y))
            if d<d1
                UnitDist=u
            endif
    endif
    u=null
     return false  
}

private unit UnitDoleco(unit u) {
group g=CreateGroup()
rect r=bj_mapInitialPlayableArea
boolexpr f=Condition(function DistUnit)
X=GetUnitX(u)
Y=GetUnitY(u)
UnitDist=null
GroupEnumUnitsInRect(g,r,f)
RemoveRect(r)
DestroyBoolExpr(f)
DestroyGroup(g)
f=null
r=null
g=null
return UnitDist
}

private int Index(unit u,int id) { 
    int index
    item indexItem

        index=0
    loop
           indexItem=UnitItemInSlot(u,id)
        if (indexItem!=null) and (GetItemTypeId(indexItem)==id)
            return index+1
        endif

        index++
        ifloop index>=bj_MAX_INVENTORY
    endloop
    return 0
}

private item Itemmm(unit u,int it) {
    int i=Index(u,it)

    if (i==0)
        return null
    else
        return UnitItemInSlot(u,i-1)
    endif
}

private void StartTovar(unit u,int CountItem) {
unit u2=UnitDoleco(u)
item it=CreateItem(Tovar[CountItem],GetUnitX(u), GetUnitY(u))
UnitAddItem(u2,it)
RemoveUnit(u)
it=null
u2=null
}

private boolean IFTRIG1() {
int i=1
unit u=GetTrainedUnit()
loop {
ifloop i>CT
if GetUnitTypeId(u)==TU[i]
StartTovar(u,i)
u=null
return true
endif
i++
 }
u=null
return false
}

private boolean IFTRIG2() {
unit u=GetManipulatingUnit()
item it
item it2=GetManipulatedItem()
item itt
integer i
integer k=GetItemCharges(it2)
integer kk=1
loop
ifloop kk>CT
itt=Itemmm(u,Tovar[kk])
if GetItemTypeId(it2)==GetItemTypeId(itt)
it=itt
kk=CT
endif
kk++
endloop
i=GetItemCharges(it)
RemoveItem(it)
SetItemCharges(it2,3)
it=null
it2=null
itt=null
u=null
return false
}

private void InitTovar() {
trigger t2=CreateTrigger()
trigger t3=CreateTrigger()
//Получает предмет
TriggerRegisterAnyUnitEventBJ(t2, EVENT_PLAYER_UNIT_PICKUP_ITEM)
TriggerAddCondition(t2,Condition( function IFTRIG2))
//Завершает
TriggerRegisterAnyUnitEventBJ(t3,EVENT_PLAYER_UNIT_TRAIN_FINISH)
TriggerAddCondition(t3,Condition( function IFTRIG1))
t2=null
t3=null
}

}


и до этого были настройки(в другом триггере)
udg_TovarArt[1]="Товар-предмет"
udg_TovarUnit[1]="Юнит-Товал"
udg_CountTovars=1(число массива)
udg_TupeBuild="Склад"
Помогите решить проблему плз "_"
Старый 27.09.2012, 09:59
DioD

offline
Опыт: 45,134
Активность:
крутите барабан...
отладочные сообщения на барабане...
внесите отладочные сообщения в студию!
Старый 27.09.2012, 11:00
влад10011

offline
Опыт: 2,337
Активность:
у меня нету отладочных сообщений =_=

влад10011 добавил:
Цитата:
Сообщение от влад10011
до этого были настройки(в другом триггере)
udg_TovarArt[1]="Товар-предмет"
udg_TovarUnit[1]="Юнит-Товал"
udg_CountTovars=1(число массива)
udg_TupeBuild="Склад"
Старый 27.09.2012, 11:15
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
влад10011, разбирайтесь в своём кривом коде сами, ни отступов ни комментариев, как по твоему тут найти ошибку, которую допустил ты?
Старый 27.09.2012, 11:27
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
влад10011:
у меня нету отладочных сообщений =_=
Тебе про это и говорят. ( ..)\
Старый 27.09.2012, 11:43
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от Master_chan
Тебе про это и говорят. ( ..)\

причём тут отладочные сообщения?
проблема в
Цитата:
Сообщение от влад10011
private boolean IFTRIG2() {
unit u=GetManipulatingUnit()
item it
item it2=GetManipulatedItem()
item itt
integer i
integer k=GetItemCharges(it2)
integer kk=1
loop
ifloop kk>CT
itt=Itemmm(u,Tovar[kk])
if GetItemTypeId(it2)==GetItemTypeId(itt)
it=itt
kk=CT
endif
kk++
endloop
i=GetItemCharges(it)
RemoveItem(it)
SetItemCharges(it2,3)
it=null
it2=null
itt=null
u=null
return false
}

оно не работает(оно должно складывать предметы, но этого не происходит)
SetItemCharges(it2,3) просто для проверки
Функция проверяет полученный предмет имеет такой же ид или нет, но дальше loop действия не проходят(проверял БЖДебаг)
Цитата:
Сообщение от quq_CCCP
влад10011, разбирайтесь в своём кривом коде сами, ни отступов ни комментариев, как по твоему тут найти ошибку, которую допустил ты?

Сложно разобраться в паре строчек без отступов?(......)

влад10011 добавил:
я просто хотел только чтобы кто-нибудь объяснили в чём проблема и как это исправить....
Старый 27.09.2012, 20:40
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
вы бы хоть переменные нормально назвали, а то выглядит как помойка, в которой непонятно что к чему.
Старый 27.09.2012, 21:35
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Тема паровоз, каждое следующее сообщение про говнокод будет удаляться (хоть это и правда).
влад10011:
дальше loop действия не проходят(проверял БЖДебаг)
Значит цикл бесконечный, копай отсюда.
Старый 28.09.2012, 13:08
влад10011

offline
Опыт: 2,337
Активность:
Master_chan, не может быть
Цитата:
Сообщение от влад10011
ifloop kk>CT

private ifloop=exitwhen (мне так удобнее)
Цитата:
Сообщение от влад10011
kk++
Старый 28.09.2012, 16:13
DioD

offline
Опыт: 45,134
Активность:
i=GetItemCharges(it)
если бы была отладка то сразу увидел сам обращение к неинициализированной переменной.
Старый 28.09.2012, 19:02
Ответ

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

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

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

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



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