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

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

Ответ
 
sleepw

offline
Опыт: 8,449
Активность:
надо было просто сразу послушацо и забыть про функции)) а так всё явно и удобно видно:)

sleepw добавил:
а если пихать плеера в кэш,это тоже хендл?)
Старый 15.03.2008, 18:37
J
expert
offline
Опыт: 48,447
Активность:
sleepw да, но дело в том что хендл у плеера постояный, т.е. это обьект который существует с самого начала игры и который не удаляется и не создается
Старый 15.03.2008, 18:46
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
» common.j typedef
Код:
//============================================================================
// Native types. All native functions take extended handle types when
// possible to help prevent passing bad values to native functions
//
type event              extends     handle  // a reference to an event registration
type player             extends     handle  // a single player reference
type widget             extends     handle  // an interactive game object with life
type unit               extends     widget  // a single unit reference
type destructable       extends     widget
type item               extends     widget
type ability            extends     handle
type buff               extends     ability
type force              extends     handle
type group              extends     handle
type trigger            extends     handle
type triggercondition   extends     handle
type triggeraction      extends     handle
type timer              extends     handle
type location           extends     handle
type region             extends     handle
type rect               extends     handle
type boolexpr           extends     handle
type sound              extends     handle
type conditionfunc      extends     boolexpr
type filterfunc         extends     boolexpr
type unitpool           extends     handle
type itempool           extends     handle
type race               extends     handle
type alliancetype       extends     handle
type racepreference     extends     handle
type gamestate          extends     handle
type igamestate         extends     gamestate
type fgamestate         extends     gamestate
type playerstate        extends     handle
type playerscore        extends     handle
type playergameresult   extends     handle
type unitstate          extends     handle
type aidifficulty       extends     handle

type eventid            extends     handle
type gameevent          extends     eventid
type playerevent        extends     eventid
type playerunitevent    extends     eventid
type unitevent          extends     eventid
type limitop            extends     eventid
type widgetevent        extends     eventid
type dialogevent        extends     eventid
type unittype           extends     handle

type gamespeed          extends     handle
type gamedifficulty     extends     handle
type gametype           extends     handle
type mapflag            extends     handle
type mapvisibility      extends     handle
type mapsetting         extends     handle
type mapdensity         extends     handle
type mapcontrol         extends     handle
type playerslotstate    extends     handle
type volumegroup        extends     handle
type camerafield        extends     handle
type camerasetup        extends     handle
type playercolor        extends     handle
type placement          extends     handle
type startlocprio       extends     handle
type raritycontrol      extends     handle
type blendmode          extends     handle
type texmapflags        extends     handle
type effect             extends     handle
type effecttype         extends     handle
type weathereffect      extends     handle
type terraindeformation extends     handle
type fogstate           extends     handle
type fogmodifier        extends     handle
type dialog             extends     handle
type button             extends     handle
type quest              extends     handle
type questitem          extends     handle
type defeatcondition    extends     handle
type timerdialog        extends     handle
type leaderboard        extends     handle
type multiboard         extends     handle
type multiboarditem     extends     handle
type trackable          extends     handle
type gamecache          extends     handle
type version            extends     handle
type itemtype           extends     handle
type texttag            extends     handle
type attacktype         extends     handle
type damagetype         extends     handle
type weapontype         extends     handle
type soundtype          extends     handle
type lightning          extends     handle
type pathingtype        extends     handle
type image              extends     handle
type ubersplat          extends     handle
в основном надо запомнить, что игровые объекты unit, destructable, item - подтипы widget, большинство же прочих типов, включая widget - подтипы handle
Старый 15.03.2008, 18:47
sleepw

offline
Опыт: 8,449
Активность:
хмхм..
а если например сделать таг:
local widget u=..
оно раскурит что это юнит?:)
Старый 15.03.2008, 19:20
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
sleepw, каждый юнит виджет, но не каждый виджет юнит. Т.е. функции которые берут и оперируют с виджетами это проглотят, но если ты например, захочешь использовать что-то вроде GetOwningPlayer то надо конкретизировать что это юнит. Т.к. функция берет юнита, а не виджет.
Старый 15.03.2008, 19:23
sleepw

offline
Опыт: 8,449
Активность:
вод это теперь будед работать в мультиплеере?
» prt1

Код:
function Trig_EBcast_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A022'
endfunction

function BeastSummonCheck takes nothing returns boolean
if((GetUnitTypeId(GetFilterUnit())=='n002'))then
    return true
endif
return false
endfunction

function ItemReturn takes nothing returns nothing
local player p=GetOwningPlayer(GetTriggerUnit())
local unit ih=I2U(GetStoredInteger(udg_cache,I2S(H2I(p)),"ebiholder"))
local unit beast=I2U(GetStoredInteger(udg_cache,I2S(H2I(p)),"EnragedBeast"))
if ih!=null then
call UnitAddItem(beast,UnitRemoveItemFromSlot(ih,0))
call UnitAddItem(beast,UnitRemoveItemFromSlot(ih,1))
call UnitAddItem(beast,UnitRemoveItemFromSlot(ih,2))
call UnitAddItem(beast,UnitRemoveItemFromSlot(ih,3))
call UnitAddItem(beast,UnitRemoveItemFromSlot(ih,4))
call UnitAddItem(beast,UnitRemoveItemFromSlot(ih,5))
endif
endfunction

function Trig_EBcast_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local player p=GetOwningPlayer(u)
local location loc=GetUnitLoc(u)
local group g=CreateGroup()
local boolexpr scheck=Condition(function BeastSummonCheck)
local boolean b
local integer lvl=GetUnitAbilityLevel(u,'A022')
call GroupEnumUnitsOfPlayer(g,p,scheck)
call DestroyBoolExpr(scheck)
set b=CountUnitsInGroup(g)==0
if lvl==1 and b then
call CreateNUnitsAtLoc(1,'n002',p,loc,bj_UNIT_FACING)
call StoreInteger(udg_cache,I2S(H2I(p)),"EnragedBeast",H2I(bj_lastCreatedUnit))
call ItemReturn()
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Orc\\FeralSpirit\\feralspiritdone.mdl",bj_lastCreatedUnit,"chest"))
else
call SimError(p,"You cannot control two beasts.")
call IssueImmediateOrder(u, "stop")
endif
call DestroyGroup(g)
call RemoveLocation(loc)
set u=null
endfunction

//===========================================================================
function InitTrig_EBcast takes nothing returns nothing
    set gg_trg_EBcast = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_EBcast, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_EBcast, Condition( function Trig_EBcast_Conditions ) )
    call TriggerAddAction( gg_trg_EBcast, function Trig_EBcast_Actions )
endfunction


» prt2

Код:
function Trig_EBdeath_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetTriggerUnit()) == 'n002'
endfunction

function itemsSafe takes nothing returns nothing
local player p=GetOwningPlayer(GetTriggerUnit())
local unit ih=I2U(GetStoredInteger(udg_cache,I2S(H2I(p)),"ebiholder"))
local integer x=1700
local integer y=-2889
if ih==null then
set ih=CreateUnit(p,'uabo',x,y,bj_UNIT_FACING)
call StoreInteger(udg_cache,I2S(H2I(p)),"ebiholder", H2I(ih))
//call ShowUnit(ih,false)
endif
call UnitAddItem(ih,GetEnumItem())
set ih=null
endfunction

function Trig_EBdeath_Actions takes nothing returns nothing
local location loc=GetUnitLoc(GetTriggerUnit())
local rect locc=RectFromCenterSizeBJ(loc,300,150)
call EnumItemsInRectBJ(locc,function itemsSafe)
call RemoveLocation(loc)
call RemoveRect(locc)
endfunction

//===========================================================================
function InitTrig_EBdeath takes nothing returns nothing
    set gg_trg_EBdeath = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_EBdeath, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_EBdeath, Condition( function Trig_EBdeath_Conditions ) )
    call TriggerAddAction( gg_trg_EBdeath, function Trig_EBdeath_Actions )
endfunction

Старый 15.03.2008, 19:36
J
expert
offline
Опыт: 48,447
Активность:
вот скажи нафиг тебе функция CreateNUnitsAtLoc(1, ...)? O_o
Старый 15.03.2008, 19:49
sleepw

offline
Опыт: 8,449
Активность:
Jon
х3 шоб ласт креатид моно было засунуть:)

sleepw добавил:
оно мя разозлило и я ему решил отомстить
Старый 15.03.2008, 19:56
J
expert
offline
Опыт: 48,447
Активность:
+ если ты хочеш сопостовлять какуюто информацию не обьекту, а играку, то сопостовляй ее Индексу игрока, так проще, т.е. хендл у играков всеравно статичны и никаких I2P() и I2S(H2I()) для него не будет
Старый 15.03.2008, 19:58
sleepw

offline
Опыт: 8,449
Активность:
фсё фсё заменил на норм)

так будед иль нет?)

sleepw добавил:
Jon
ну так его ж в интежер надо конвернтнутьО_о
Старый 15.03.2008, 20:01
J
expert
offline
Опыт: 48,447
Активность:
ну я посмотрел по диагонали, грубо говоря норм... принцепи будет работать для каждого игрока... только я не совсем разобрался в смысле кода, потому неуверен
Старый 15.03.2008, 20:05
sleepw

offline
Опыт: 8,449
Активность:
сумон + сохраннеие предметов после смерти)
Старый 15.03.2008, 20:06
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
ну так его ж в интежер надо конвернтнутьО_о

GetPlayerId() - вот и сконвертил...

Jon добавил:
омг, ты храниш предметы в невидимом юните?
Старый 15.03.2008, 20:08
sleepw

offline
Опыт: 8,449
Активность:
ну а потом всё равно в стринг.. на одну фунцию меньше)

sleepw добавил:
Jon
до
а как нада)
Старый 15.03.2008, 20:09
J
expert
offline
Опыт: 48,447
Активность:
кстате, уточною - работает для каждого игрока, а не для каждого юнита, т.е. если например "этим" будут пользоватся 2 юнита одного и тогоже игрока то будет плохо
Старый 15.03.2008, 20:09
sleepw

offline
Опыт: 8,449
Активность:
Jon
ну такого не будет :)

sleepw добавил:
х3,а если б было то каг тогда?
Старый 15.03.2008, 20:12
J
expert
offline
Опыт: 48,447
Активность:
sleepw вообще лучше РБ пользоватся как можно меньше, и придержится более мение традиционых способов, но это так к слову... принцепи даже неважно...

ну даж незнаю... както пожопорецки это... почему нельзя кинуть предметы куданить, скрыть их, и в кеш атачить к нужному юниту?
Старый 15.03.2008, 20:13
sleepw

offline
Опыт: 8,449
Активность:
а вот так получицо записать в кэш?

local unit u=GetTriggerUnit()
local integer i=0
loop
exitwhen i>=5
set i=i+1
call StoreInteger(udg_cache,I2S(GetPlayerId(GetOwningPlayer(u))),"items",H2I(UnitItemInSlot(u,i)))
endloop

sleepw добавил:
эх.. сэры хелпайте..
» save

Код:
function Trig_____________________________________004_Actions takes nothing returns nothing
local unit u=gg_unit_N001_0077
local integer i=0
loop
exitwhen i>=5
set i=i+1
call DisplayTextToForce(GetForceOfPlayer(GetOwningPlayer(u)),I2S(i))
call StoreInteger(udg_cache,"i",I2S(H2I(UnitItemInSlot(u,i))),H2I(UnitItemInSlot(u,i)))
endloop
endfunction


» re

Код:
function Trig_____________________________________005_Actions takes nothing returns nothing
local unit u=gg_unit_N001_0077
local integer i=0
loop
exitwhen i>=5
set i=i+1
call DisplayTextToForce(GetPlayersAll(),I2S(i))
call UnitAddItemById(u,GetStoredInteger(udg_cache,"i",I2S(i)))
endloop
endfunction



вод тобишь пытаюсь запомнить все итемы у юнита,
а потом этиже итемы добавить..
2 часа пля просидел так ничё и не получилось..
Старый 15.03.2008, 22:06
J
expert
offline
Опыт: 48,447
Активность:
Ты запоминаеш Хендл предмета
А даеш юниту новый предмет типа "хендл прошлого предмета"
такого предмета естествено несуществует...
Старый 15.03.2008, 22:19
sleepw

offline
Опыт: 8,449
Активность:
подкоректи плиз я мего запуталсо=\
Старый 15.03.2008, 22:24
Ответ

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

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

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

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



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