Добавлен mogu_umeyu
Здравствуйте! Столкнулся с проблемой, прошу помощи!
Ситуация: в карте есть герои с одинаковыми способностями: Мина и Ловушка.
Т.к. модели мины и ловушки не особо пестрят тим колором то отличить свою мину от чужой визуально не получается (не берем в расчет посмотреть на миникарту, навести мышку и т.д.).
Цель: Что-бы Игрок мог визуально различать свои мины ,мины союзников и чужие.
Мины и ловушки невидимы. Герой их видит только при наличии вардов, гема и т.д.
Уповаю на великие умы ХГМ"а! Помогите :)
Сам я не силен в джасе :(
Ситуация: в карте есть герои с одинаковыми способностями: Мина и Ловушка.
Т.к. модели мины и ловушки не особо пестрят тим колором то отличить свою мину от чужой визуально не получается (не берем в расчет посмотреть на миникарту, навести мышку и т.д.).
Цель: Что-бы Игрок мог визуально различать свои мины ,мины союзников и чужие.
Мины и ловушки невидимы. Герой их видит только при наличии вардов, гема и т.д.
Уповаю на великие умы ХГМ"а! Помогите :)
Сам я не силен в джасе :(
Ниже то что есть на данный момент (сделано не мной), но к сожалению создаваемый спецэффект виден для всех игроков.
scope MineVision initializer InitMineVision
globals
private integer mine_id[]
private integer trap_id[]
endglobals
define{
private sfx="Abilities\\Weapons\\WitchDoctorMissile\\WitchDoctorMissile.mdl"
}
private function MineVisionCondition takes nothing returns boolean
group g=CreateGroup()
integer i=1
string s=" "
loop
exitwhen i>10
GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,null)
unit F=FirstOfGroup(g)
loop
exitwhen F==null
if IsUnitVisible(F,Player(i-1))==true && IsUnitEnemy(F,Player(i-1))==true && /*
*/ (GetUnitTypeId(F)==mine_id[0] or GetUnitTypeId(F)==mine_id[1] or /*
*/ GetUnitTypeId(F)==mine_id[2] or GetUnitTypeId(F)==mine_id[3] or /*
*/ GetUnitTypeId(F)==trap_id[0] or GetUnitTypeId(F)==trap_id[1] or /*
*/ GetUnitTypeId(F)==trap_id[2] or GetUnitTypeId(F)==trap_id[3])
if GetLocalPlayer()==Player(i-1)
s=sfx
endif
AddEffectTarget(s,F,"origin",0.2)
endif
GroupRemoveUnit(g,F)
F=FirstOfGroup(g)
endloop
i++
endloop
DestroyGroup(g)
return false
endfunction
private function InitMineVision takes nothing returns nothing
trigger t=CreateTrigger()
TriggerRegisterTimerEvent(t,0.5,true)
TriggerAddCondition(t,function MineVisionCondition)
mine_id[0]='n002'
mine_id[1]='n003'
mine_id[2]='n000'
mine_id[3]='n007'
trap_id[0]='o000'
trap_id[1]='o002'
trap_id[2]='o001'
trap_id[3]='o003'
endfunction
endscope
Принятый ответ
function AddLocalEffect takes string eff, unit u,player p,string a returns effect
if not IsPlayerAlly(GetLocalPlayer(),p) and GetPlayerState(GetLocalPlayer(),PLAYER_STATE_OBSERVER) == 0 then
set eff = " "
endif
return AddSpecialEffectTarget(eff,u,a)
endfunction
неохота качать JNGP чтоб твой код тестить, заюзай эту функцию
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. alexprey
Ред. mogu_umeyu
А на счет 2-го : можешь сделать? я дам карту.
ты прикалываешься? основы не знаешь, зато пишешь на cjasse, иди в статьях поищи как использовать нестандартные функции.
quq_CCCP: ну как?
Ред. Mexaz
Да, это не кодерский метод, но он гарантированно не создаст утечек и багов, да и не сильно обременит карту весом.
насколько я знаю только в cjass можно писать дефайны и обходиться без set и call
но в сиджасе не надо писать globals а функции описываются как в сишке
поэтому это :
путь импорта для измененной текстуры:
g.blp
Но кстати моделька получилась даже получше базовой. Мб возьму её вместо той что была :)
Ред. modern19999
Вроде на вид условие корявое. И все игроки в течение цикла попадают под GetLocalPlayer(). Хотя, может показалось. При создании просто создать эффект функцией, которую напечатали в первом сообщении. А в функции, которая предложена, перебираются все мины на карте.. Это периодик? Даже если мины создаются всего 1 раз за игру целой пачкой, всё равно проще отдельно каждой мине создавать спецэффект сразу при создании.