On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
moderator




Пост N: 936
Рейтинг: 3
ссылка на сообщение  Отправлено: 27.07.07 14:22. Заголовок: Макросы


Сюда выкладываем макросы, или вспомогательные функции, состоящие из других функций.

Взрыв

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) -- единичный взрыв.

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]


moderator




Пост N: 937
Рейтинг: 3
ссылка на сообщение  Отправлено: 27.07.07 15:27. Заголовок: Re:


Требует: макрос explosion.

Бомбардировка

function bombard(x1, y1, x2, y2, times, spd, explo, explospd)
times = times or 24
spd = spd or 15
explo = explo or 1
explospd = explospd or 0
local pixx = (x2-x1)/times
local pixy = (y2-y1)/times
for i=0, times-1 do
pushcmd(function() explosion(x1+pixx*i, y1+pixy*i, explo, explospd) end, 0+i/100*spd)
end
end

x1, y1 - это координаты начала бомбардировки.
x2, y2 - это координаты конца бомбардировки.
times(опционально) - это сколько точек взрыва будет сделано.
spd(опционально) - это как быстро будет проходить бомбардировка всех точек.
explo(опционально) - это сколько раз будет взрыв в каждой точке.
explospd(опционально) - это промежуток между взрывами в миллисекундах.

Применение:

-- это четыре волны взрывов с промежутками в секунду,
-- пересекающих весь экран 32*24 клеток.
-- Точка взрыва - каждая клетка.
bombard(0, 0, 32*32, 24*24, 32, 10, 4, 100)

-- это бомбардировка каждой второй клетки, пересекающая наискосок
-- зону 32*24 клетки. Сила взрыва - четыре обычных взрыва.
bombard(0, 0, 32*32, 24*32, 16, 20, 4)

-- это взрыв каждой половины клетки по горизонтали посередине экрана.
-- Сбрасываются 64 бомбы каждые полсекунды.
-- Количество взрывов на полклетки - 10.
-- Кстати, за этими скучными словами скрывается туча огня.
bombard(0, 12*32, 32*32, 12*32, 64, 100, 10, 20)

-------
Засим кланяюсь, HmH.
Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 973
Рейтинг: 3
ссылка на сообщение  Отправлено: 27.09.07 14:21. Заголовок: Re:


Описание:
Бомбардировка случайных точек на полигоне с координатами x1. y1, x2, y2 определенное время.

Требует:
- макросы explosion и bombard
- версию 1.41a1 и выше(поддержка библиотеки math)

Взрыв полигона

function dangerzone(x1, y1, x2, y2, time, spd, islinear, linspd)
time = time or 500
spd = spd or 500
islinear = islinear or 0
linspd = linspd or math.random(5, 20)
if islinear==0 then
local i=time/spd
for q=0, i-1 do
pushcmd(function()
rx = math.random(x1*32, x2*32)
ry = math.random(y1*32, y2*32)
explosion(rx, ry) end, spd*q/100)
end
end
if islinear==1 then
local i=time/spd
for q=0, i-1 do
pushcmd(function()
local rx1 = math.random(x1*32, x2*32)
local rx2 = math.random(x1*32, x2*32)
local ry1 = math.random(y1*32, y2*32)
local ry2 = math.random(y1*32, y2*32)
bombard(rx1, rx2, ry1, ry2, linspd, spd) end, spd*q/100)
end
end
end`

x1, y1 - координаты верхней левой точки целевого полигона. Измеряются В КЛЕТКАХ!
x2, y2 - координаты нижней правой точки целевого полигона. Измеряются В КЛЕТКАХ!
time(опционально) - время, в течение которого будут происходить взрывы. ВАЖНО: тут просчет ведется по времени, а не по кол-ву взрывов. Имейте это в виду при применении данного макроса.
spd(опционально) - интервал между взрывами, в мс.
isline(опционально) - проверка, отвечающая за тип взрывов(бомбардировка(1) или одиночные(0)). Изначально - 0, т.е. одиночные.
linspd(опционально) - скорость бомбардировки. Задействуется только, если включен бомбардировочный режим.

Применение:
dangerzone(0, 0, 32, 24, 300, 10, 1) -- 3-секундная бомбардировка в 30 линий,
-- которые идут со случайной скоростью от 20/100 до 5/100 секунды на взрыв.

dangerzone(0, 0, 32, 24, 10000) -- 100-секундная бомбардировка
-- по случайным точкам всей карты 32*24.
-- Интервал между взрывами - 20мс.

dangerzone(12, 0, 20, 24) -- 2.5-секундная бомбардировка случайных точек
-- на полигоне 12, 0, 20, 24.

-------
Засим кланяюсь, HmH.
Спасибо: 0 
Профиль Цитата Ответить
SILVER DRAGON




Пост N: 241
Рейтинг: 6
ссылка на сообщение  Отправлено: 27.09.07 18:26. Заголовок: Re:


цивильные макросы. надо мне заняться, да только хочу уже играбельную версию а тогда уже и командами и макросами и всем остальным.

Спасибо: 0 
Профиль Цитата Ответить
SILVER DRAGON




Пост N: 242
Рейтинг: 6
ссылка на сообщение  Отправлено: 27.09.07 18:29. Заголовок: Re:


а еще надо сделать редактирование ВСЕХ параметров оружия вплоть до разлета и скорости атаки. тогда можно будет реализовать пулемет вулкан, просто по нажатию запуская таймер и каждое определенный промежуток времени увеличивать скорость атаки и разлет. и сразу необходимо будет сделать функции типа: onMouseover только для клавы, т.е. по нажатию один скрипт, по отпусканию кнопки другой.

Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 982
Рейтинг: 3
ссылка на сообщение  Отправлено: 06.10.07 18:00. Заголовок: Re:


Описание: создает предмет num на x, y, приводя тому свойства param.

Создать

function create(num, x, y, param)
local a = {"crate", "pu_booster", "pu_health", "pu_mine", "pu_shield", "pu_shock", "respawn_point", "spotlight", "turret_cannon", "turret_gauss", "turret_minigun", "turret_rocket", "user_object", "wall_brick", "wall_concrete", "water", "weap_autocannon", "weap_bfg", "weap_cannon", "weap_gauss", "weap_minigun", "weap_plasma", "weap_ram", "weap_ripper", "weap_rockets", "wood"}
param = param or {}
actor(a[num], x, y, param)
end

num - номер предмета.
x - координаты создаваемого предмета по x
y - координаты создаваемого предмета по y
param - параметры создаваемого предмета

-------
Засим кланяюсь, HmH.
Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 983
Рейтинг: 3
ссылка на сообщение  Отправлено: 06.10.07 18:10. Заголовок: Re:


Описание: создает times предметов со случайными номерами от diapazone1 до diapazone2 на случайных клетках на площади между x1, y1, x2, y2. Придает предметам параметры param.

Требует:
- макрос create;
- библиотеку math.

Залить

function fill(x1, y1, x2, y2, diapason1, diapason2, times, param)
local times1=times or (x2-x1)*(y2-y1)/32-math.random((x2-x1)*(y2-y1)/128)
if times1>0 then
local rx=math.random(x1, x2)*32+16
local ry=math.random(y1, y2)*32+16
local ritem=math.random(diapason1, diapason2)
create(ritem, rx, ry, param)
fill(x1, y1, x2, y2, diapason1, diapason2, times1-1)
end
end

x1, y1, x2, y2 - координаты зоны.
diapason1, diapason2 - первый и последний дозволенные номера.
times - кол-во создаваемых предметов.
param - параметры создаваемого предмета

-------
Засим кланяюсь, HmH.
Спасибо: 0 
Профиль Цитата Ответить
Создатель




Пост N: 281
Рейтинг: 14
ссылка на сообщение  Отправлено: 07.10.07 10:02. Заголовок: Re:


hmh функцию create можно написать немного покороче. Вместо кучи if'ов:
 
function create(num, x, y, param)
local a = {"crate", "pu_booster", "weap_bfg"}[num] -- и остальные предметы сюда же
actor(a, x, y, param) -- здесь не обязательно проверять param на nil
end


И еще пара замечаний:
- всё, что можно вызвать напрямую, надо вызывать напрямую, а не через pushcmd
- все переменные по умолчанию глобальные, поэтому их надо объявлять как local


Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 985
Рейтинг: 3
ссылка на сообщение  Отправлено: 07.10.07 17:10. Заголовок: Re:


Исправил все макросы. Обновленные версии - в теме.

-------
Засим кланяюсь, HmH.
Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 13
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.09.09 11:22. Заголовок: А куда писать макрос..


А куда писать макросы?

Be quiet, be smart, be ready
Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 1302
Рейтинг: 12
ссылка на сообщение  Отправлено: 29.09.09 11:28. Заголовок: В файлы формата .lua..


В файлы формата .lua в папке campaign. Открываешь Блокнотом и пишешь в самом начале. Вызываются они функцией, на которую записаны, то есть, к примеру, explosion(16*32, 12*32) где-нибудь в тексте.

Спасибо: 1 
Профиль Цитата Ответить
постоянный участник




Пост N: 15
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.09.09 11:30. Заголовок: Всё спасибо понял ..


Всё спасибо понял

Be quiet, be smart, be ready
Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 207
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.10.09 21:24. Заголовок: hmh пытался впихнуть..


hmh пытался впихнуть бомбардировку в кампанию (не получилось)
Можеш на кратком примере обья снить как это делать?

Be quiet, be smart, be ready
Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 1315
Рейтинг: 13
ссылка на сообщение  Отправлено: 22.10.09 22:21. Заголовок: VIRUS Надо вставить ..


VIRUS Надо вставить макрос(то есть строки от function и до последнего end) куда-нибудь в начало кампании, потом дальше по кампании вызвать функцию, добавленную макросом. Если над макросом написано, что он требует другой макрос, надо вставить требуемый макрос до требующего. То есть бомбардировку вставить надо так:

 цитата:
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

function bombard(x1, y1, x2, y2, times, spd, explo, explospd)
times = times or 24
spd = spd or 15
explo = explo or 1
explospd = explospd or 0
local pixx = (x2-x1)/times
local pixy = (y2-y1)/times
for i=0, times-1 do
pushcmd(function() explosion(x1+pixx*i, y1+pixy*i, explo, explospd) end, 0+i/100*spd)
end
end


и вызвать так:

 цитата:
bombard(0, 0, 32*32, 24*24, 32, 10, 4, 100)



Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 208
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.10.09 22:31. Заголовок: Тоесть если не встав..


Тоесть если не вставить это:

 цитата:
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



То не сработает это:

 цитата:
function bombard(x1, y1, x2, y2, times, spd, explo, explospd)
times = times or 24
spd = spd or 15
explo = explo or 1
explospd = explospd or 0
local pixx = (x2-x1)/times
local pixy = (y2-y1)/times
for i=0, times-1 do
pushcmd(function() explosion(x1+pixx*i, y1+pixy*i, explo, explospd) end, 0+i/100*spd)
end
end



Be quiet, be smart, be ready
Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 1316
Рейтинг: 13
ссылка на сообщение  Отправлено: 23.10.09 00:04. Заголовок: VIRUS Да, именно так..


VIRUS Да, именно так.

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 747
Рейтинг: 1
ссылка на сообщение  Отправлено: 10.01.10 12:18. Заголовок: hmh пишет: function..


hmh пишет:

 цитата:
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


А можно написать
function explosion(position,nameo)



Be quiet, be smart, be ready
іʁɔvʎнdǝʚǝdǝu dиw
Спасибо: 0 
Профиль Цитата Ответить
гранатомётчик со стажем




Пост N: 363
Рейтинг: 8
ссылка на сообщение  Отправлено: 16.08.10 10:31. Заголовок: Вот свежачка немного..


темка затухла :(
Вот свежачка немного, чтоб совсем мертвой не казалась :)


 цитата:

local symbols={["byNC22"]=0,["А"]=160,["Б"]=161,["В"]=162,["Г"]=163,
["Д"]=164,["Е"]=165,["Ж"]=166,["З"]=167,["И"]=168,
["Й"]=169,["К"]=170,["Л"]=171,["М"]=172,["Н"]=173,
["О"]=174,["П"]=175,["Р"]=176,["С"]=177,["Т"]=178,
["У"]=179,["Ф"]=180,["Х"]=181,["Ц"]=182,["Ч"]=183,
["Ш"]=184,["Щ"]=185,["Ъ"]=186,["Ы"]=187,["Ь"]=188,
["Э"]=189,["Ю"]=190,["Я"]=191,["а"]=192,["б"]=193,
["в"]=194,["г"]=195,["д"]=196,["е"]=197,["ж"]=198,
["з"]=199,["и"]=200,["й"]=201,["к"]=202,["л"]=203,
["м"]=204,["н"]=205,["о"]=206,["п"]=207,["р"]=208,
["с"]=209,["т"]=210,["у"]=211,["ф"]=212,["х"]=213,
["ц"]=214,["ч"]=215,["ш"]=216,["щ"]=217,["ъ"]=218,
["ы"]=219,["ь"]=220,["э"]=221,["ю"]=222,["я"]=223,
["Ё"]=165,["ё"]=197,[" "]=0, ["!"]=1, ["\""]=2,
["#"]=3, ["$"]=4, ["%"]=5, ["&"]=6, ["'"]=7,
["("]=8, [")"]=9, ["*"]=10, ["+"]=11, [","]=12,
["-"]=13, ["."]=14, ["/"]=15, ["0"]=16, ["1"]=17,
["2"]=18, ["3"]=19, ["4"]=20, ["5"]=21, ["6"]=22,
["7"]=23, ["8"]=24, ["9"]=25, [":"]=26, [";"]=27,
["<"]=28, ["="]=29, [">"]=30, ["?"]=31, ["@"]=32,
["A"]=33,["B"]=34,["C"]=35,["D"]=36,
["E"]=37,["F"]=38,["G"]=39,["H"]=40,["I"]=41,
["J"]=42,["K"]=43,["L"]=44,["M"]=45,["N"]=46,
["O"]=47,["P"]=48,["Q"]=49,["R"]=50,["S"]=51,
["T"]=52,["U"]=53,["V"]=54,["W"]=55,["X"]=56,
["Y"]=57,["Z"]=58,["["]=59,["\\"]=60,["]"]=61,
["^"]=62,["_"]=63,["'"]=64,["a"]=65,["b"]=66,
["c"]=67,["d"]=68,["e"]=69,["f"]=70,["g"]=71,
["h"]=72,["i"]=73,["j"]=74,["k"]=75,["l"]=76,
["m"]=77,["n"]=78,["o"]=79,["p"]=80,["q"]=81,
["r"]=82,["s"]=83,["t"]=84,["u"]=85,["v"]=86,
["w"]=87,["x"]=88,["y"]=89,["z"]=90,["{"]=91,
["|"]=92,["}"]=93,["~"]=94
}

function user.print(text,x,y,name,font)
local size=0.45
if font==nil then font='font_default'
else size=0.2 end
local curx,cury; local n=0;
if name==nil then
name=""
n=""
end
local t = string.gsub(text, "([^<])",
function(ch)
if curx == nil or cury==nil then
curx=x
cury=y
if x==nil or y==nil then
message('введите правильно user.print(\'текст\',расстояние_между_символами,начало_по_х,по_у,имя)')
end
end
if name~="" then n=n+1 end
actor('user_sprite',((curx-1) * 32) + 16,((cury-1) * 32) + 16,{name=name.."dot"..n, texture=font, frame=symbols[ch]})
curx=curx+size
end)

end

function user.erase(name)
local n=1

while (exists(name.."dot"..n)) do
kill(name..n)
n=n+1
end

end
--------примеры использования---------
user.print('Тестовая фраза 1: Эх, взъярюсь, толкну флегматика: дал бы щец жарчайших, Пётр!',10,18,'text2')
user.print('Тестовая фраза small text: Эх, взъярюсь, толкну флегматика: дал бы щец жарчайших, Пётр!',10,18.5,'text4','font_small')
user.print('Тестовая фраза 3: The quick brown fox jumps over the lazy dog. !@$#$^*&*()~',10,19,'text5','font_small')
user.print('Тестовая фраза 2: Хрюкнул ёж <Тыща>, а ведь село Фершампенуаз - это центр Нагайбакского района Челябинской области.',10,17,'text')
user.print('Тестовая фраза 3: The quick brown fox!@$#$^*&*()~ jumps over the lazy dog.',10,16,'text3')




функция user.print выводит в правую сторону от заданной точки x,y любой текст
user.print(текст,точка_х,точка_y,название_для_этого_текста,шрифт)
шрифт по умолчанию font_default, но есть еще font_small он намного мельче, как в message()
и удаление через
user.erase(название_для_этого_текста)

В умелых руках это можно использовать где угодно: реализовать чат между ботами, создать говорливых NPC, выводить по 100 разных месагов в минуту и т.д. font_default шрифт намного лучше воспринимается чем те которыми выводятся сообщения через message() . На моем 1280х1024 message() сообщения можно и не заметить

если найду время применю где-нибудь :)


Ну и вот компания-скрипт-часы точнее только таймер т.к. не могу понять как виндовое время получить (наверн нужны доп плагины для lua)
http://narod.ru/disk/23758851000/clock.zip.html<\/u><\/a>
хорошоб подошло как заставка для винды.


...я здесь был... Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 1769
Рейтинг: 4
ссылка на сообщение  Отправлено: 16.08.10 15:58. Заголовок: Anti_Killer а сделай..


Оффтоп: Anti_Killer а сделай модификацию Battle City с говорящими ботами


Be quiet, be smart, be ready!
I go...
...and you will be deid!
Спасибо: 0 
Профиль Цитата Ответить
moderator




Пост N: 2811
Рейтинг: 9
ссылка на сообщение  Отправлено: 16.08.10 16:05. Заголовок: VIRUS а сам?..


Оффтоп: VIRUS а сам?




Если будешь ты курить,
Пиво, водку, коньяк пить,
То думать голова не будет,
Семья, друзья тебя забудут.
Будешь ты плохим,
Станешь ты таким -

NNNNNNN______N_______N____N_____N__N_____N
___N_________N_N______N____N_____N_N______
___N________NNNN______NNNNN_____NN_______
___N_______N____N_____N____N_____N_N______
___N______N______N____N____N_____N__N_____N
__________________________Зона смерти


<\/u><\/a>
<\/u><\/a>
<\/u><\/a>
<\/u><\/a>
Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 1771
Рейтинг: 4
ссылка на сообщение  Отправлено: 16.08.10 22:30. Заголовок: Я тупой :sm54: ..


Оффтоп: Я тупой


Be quiet, be smart, be ready!
I go...
...and you will be deid!
Спасибо: 0 
Профиль Цитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет