Q/A

Добавлен , опубликован
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
28
10 лет назад
0
prog,полноэкранный ап скилов(как в диабло) круче чем ро
0
24
10 лет назад
0
nvc123, гвозди микроскопом тоже круче забивать.
0
28
10 лет назад
0
prog, смотря какой микроскоп
пластмассовым не кул
0
5
10 лет назад
Отредактирован Shuex
0
Как лучше всего занести юнитов в группу G в радиусе R от точки P ?
Перед занесением нужно проверить, чтобы юнит не был невосприимчивым к магии и не являлся членом группы G.
Вот, я сделал свой первый спелл на джассе) Точнее это пока заготовка. Линейное движения снаряда.
И вот, мой снаряд летит, а как выбирать юнитов вокруг него, чтобы урон наносить?
И оптимальный ли код у меня?)
Загруженные файлы
0
28
10 лет назад
0
Emily_WoRnz, кидай код текстовым файлом а не картой
0
5
10 лет назад
0
nvc123, вот код:
include "cj_types.j"
library holyOrb initializer init{
private integer spell = 'A005' равкод способности
private integer dummyId = 'u001' равкод снаряда
private real speed = 20.00 скорость движения снаряда
private real dmgAoE = 275.00 область нанесения урона
private int maxIndex = 0 индекс для MUI


struct missile{
unit caster
unit dummy
real distance
real angle
real damage
group dmgGroup

static void new(unit caster,unit dummy,real distance, real angle,real damage){ создаём статичный метод new
local missile a=missile.create()//создание структуры
if(int(a)>10){ защита от переполнения
call a.destroy()
return
}
else{
set a.caster=caster юнит, применивший заклинание
set a.dummy=dummy заносим в структуру юнита которого будем двигать
set a.distance=distance заносим в структуру юнита к которому будем двигаться
set a.angle=angle
set a.damage=damage
set a.dmgGroup=null

call DisplayTimedTextToForce(GetPlayersAll(), 1.00, "Missile created")
call DisplayTimedTextToForce(GetPlayersAll(), 1.00, GetUnitName(a.dummy) + " angle = " + R2S(a.angle))
}
}

void delete(){
call KillUnit(.dummy)

set .caster=null
set .dummy=null
думаю, реальные переменные обнулять не надо, это я на всякий случай :D
set .angle=0
set .distance=0
set .damage=0

call .destroy()
call DisplayTimedTextToForce(GetPlayersAll(), 1.00, "Missile deleted")
}


void move(){
local location dummyLoc = GetUnitLoc(.dummy)
local location offsetLoc = PolarProjectionBJ(dummyLoc,speed,.angle)

set .distance = .distance - speed

if(.distance<speed){
call .delete()
}
else{
call SetUnitPositionLoc(.dummy,offsetLoc)
call SetUnitFacing(.dummy,.angle)

}

call RemoveLocation(dummyLoc)
call RemoveLocation(offsetLoc)
}

}

private void update(){
set maxIndex = maxIndex + 1
local missile holyOrb = maxIndex
loop
if(holyOrb.distance>=speed){
holyOrb.move()
}
exitwhen holyOrb==1
holyOrb--
endloop
}

private void action(){
local location casterLoc = GetUnitLoc(GetTriggerUnit())
local location targetLoc = GetSpellTargetLoc()
local real ho_angle = AngleBetweenPoints(casterLoc,targetLoc)
local real ho_distance = 1100.00
local real ho_damage = 70.00 * I2R(GetUnitAbilityLevel(GetTriggerUnit(), spell))
local unit ho_dummy

call CreateNUnitsAtLoc( 1, dummyId, GetTriggerPlayer(), casterLoc, ho_angle )
set ho_dummy = GetLastCreatedUnit()

call missile.new(GetTriggerUnit(),ho_dummy,ho_distance,ho_angle,ho_damage) вызываем статичный метод new

ho_dummy = null
call RemoveLocation(casterLoc)
call RemoveLocation(targetLoc)
}
private boolean cond(){
return GetSpellAbilityId()==spell
}
private void init(){
local trigger trig=CreateTrigger() создание триггера
local timer tmr=CreateTimer() создание таймера
call TriggerAddAction(trig,function action) добавление действия
call TriggerAddCondition(trig,Condition(function cond)) добавление условия
call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_EFFECT) добавление события
call TimerStart(tmr,0.025,true,function update) запускаем таймер с функцией update
set trig=null
}
}
так как выбрать юнитов в области и продамажить?)
0
21
10 лет назад
Отредактирован Buulichkaa
0
выбираем
native CreateGroup                          takes nothing returns group //создание группы

native GroupEnumUnitsInRange                takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing //занесение юнитов в радиусе в группу по условию

native Condition        takes code func returns conditionfunc // создание условия

constant native GetFilterUnit       takes nothing returns unit //юнит, возвращаемый в ф-ии условия
дамажим
native UnitDamageTarget             takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean
0
5
10 лет назад
0
Buulichkaa, лучше конкретный пример мне приведи.. я неопытный ещё)
Просто не могу разобраться создавать эти функции в структуре или нет, если нет, то надо в них передать будет параметры, игрока например
0
28
10 лет назад
Отредактирован nvc123
0
unit aaa=дами юнит

void abcd(){
UnitDamageTarget(aaa,GetEnumUnit(),500,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
}

void abc(){
group a=CreateGroup()
unit b=GetTriggerUnit()
GroupEnumUnitsInRange(a,GetUnitX(b),GetUnitY(b),500,null)
ForGroup(a,function abcd)
DestroyGroup(a)
a=null
b=null
}
0
21
10 лет назад
0
nvc123, условие припердоль
0
28
10 лет назад
0
Buulichkaa, ему надо выбрать всех юнитов в области
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.