Сюда выкладываем макросы, или вспомогательные функции, состоящие из других функций. Взрыв
function explosion(x, y, times, spd) local times = times or 1 local spd = spd or 0 for i=0, times-1 do pushcmd(function() actor("user_object", x, y, {name="exploder"}); damage(100, "exploder") end, 0+i/100*spd) end end x, y - координаты взрыва times(опционально) - количество взрывов spd(опционально) - время между взрывами в миллисекундах. Применение: explosion(16*32, 12*32, 5, 20) -- бомбардировка по клетке 16-12. explosion(16*32, 12*32, 5, 0) -- мгновенный сильный взрыв по клетке 16-12. explosion(16*32, 12*32) -- единичный взрыв.
Отправлено: 07.01.12 12:52. Заголовок: Сегодня работал над ..
Сегодня работал над созданием случайных пушек и над отключением прицеливанием мышкой. В первом проблема от незнания, а во втором нужно как-то обновить профиль без входа в опции. Пока ничего нет, буду в исходниках ковыряться...
Вспомнив геометрию, написал универсальную функцию передвижения объектов в любом направлении:
function move(name, x, y, valueType, speed) x1, y1 = position(name) x2 = x y2 = y if valueType == 'grid' then x2 = x2*32-16 y2 = y2*32-16 end xKatAB = math.abs(x1 - x2) yKatOA = math.abs(y1 - y2) GipOB = math.sqrt((xKatAB * xKatAB) + (yKatOA * yKatOA)) if x1 < x2 and y1 < y2 then for i=1, GipOB do pushcmd( function() setposition(name, x1+i*(xKatAB/GipOB), y1+i*(yKatOA/GipOB)) end, i/speed) end end if x1 > x2 and y1 > y2 then for i=1, GipOB do pushcmd( function() setposition(name, x1-i*(xKatAB/GipOB), y1-i*(yKatOA/GipOB)) end, i/speed) end end if x1 > x2 and y1 < y2 then for i=1, GipOB do pushcmd( function() setposition(name, x1-i*(xKatAB/GipOB), y1+i*(yKatOA/GipOB)) end, i/speed) end end if x1 < x2 and y1 > y2 then for i=1, GipOB do pushcmd( function() setposition(name, x1+i*(xKatAB/GipOB), y1-i*(yKatOA/GipOB)) end, i/speed) end end end
Все даты в формате GMT
3 час. Хитов сегодня: 6
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет