Навигация по блогу

понедельник, 11 апреля 2011 г.

The Intro

Здравствуйте дорогие читатели(я надеюсь они у меня есть или будут) моего нового блога "Crazy Studio". Многие из вас знают меня как игрока и скриптера мультиплеера MTA:SA. Но многие думают, что я сделал только пару мелких ресурсов, и на этом мое "творчество" окончено, в чем они ошибаются. Мысль, на создание этого блога, меня подтолкнул Ride, который создал свой блог, и успешно его пополняет новым контентом. Этим решил заняться и я. До этого у меня было много попыток создать блог, но все они были заброшены через 2-3 дня. Но на этот раз, я хочу постараться не забросить этот блог за неделю. Тематика даного блога будет - МТА, и все что с нею связано, в особенности это будет программирование на языке Lua, но не всегда. Сегодняшний пост я хочу написать, о ресурсе который никто не знает, и никогда о нем не слышал, ибо я никому об нем не рассказывал(не волнуйтесь, у меня тонна таких ресурсов;) ) Его название "helicopter-shoot". Как вы уже догадались с названия, этот ресурс связан с вертолетом, а именно стрельбой из вертолета миниганом. Мысль на создания этого ресурса, меня подтолкнуло какой-то видео с YouTube. Создавать его я начал 11.04.11 и "окончил" в тот-же день(почти окончил). Так как в МТА, нету функции стрелятьИзВертолета(x,y,z), то пришлось делать ее самому. Работа ресурса заключается в том, чтобы отслеживать положение направление камеры игрока, который сидит пассажиром в вертолете Sparrow, и при нажатии на клавишу, проверять, находиться ли какой-либо обьект (пед, машина) в этой позиции, и если находиться, то отнимать ему(й) ХП. Так выглядит ресурс из положения пилота:
Как видно, все остается таким самым, если-бы вы сели как пилот без ресурса. Но если мы сядем пассажиром:Мы увидим, что у нас появился прицел, и можем крутить камеру мышкой, куда мы захотим. При нажатии на ЛКМ, в место, куда смотрит курсор, появится простой particle-эффект искр, и если там находится машина или пед, отнимаем ХП:

В идеальности, этот ресурс еще не закончен. Так как я хотел добавить модель минигана к камере (чтобы он двигался за камерой) и звук стрельбы, это все легко добавить, но мне лень. Но с точки зрения работоспособности, этот ресурс полностью рабочий и готов к употреблению ;) Если кому-то из начинающих скриптеров, интересно как он работает, вот вам исходник клиентского файла (вам другой больше и не надо):

thePlayer = getLocalPlayer()
screenX,screenY = guiGetScreenSize()
size = (screenX/1024)*64
x,y,z = 0

function getPositionInFrontOfElement(element,x,y,z)
local matrix = getElementMatrix ( element )
local offX = x * matrix[1][1] + y * matrix[2][1] + z * matrix[3][1] + matrix[4][1]
local offY = x * matrix[1][2] + y * matrix[2][2] + z * matrix[3][2] + matrix[4][2]
local offZ = x * matrix[1][3] + y * matrix[2][3] + z * matrix[3][3] + matrix[4][3]
return offX, offY, offZ
end

function getCoords( cursorX, cursorY, absoluteX, absoluteY, worldX, worldY, worldZ)
x = worldX
y = worldY
z = worldZ
end

function setCoords()
pX,pY,pZ = getPositionInFrontOfElement(thePlayer,1,0,.5)
setElementPosition(object,pX,pY,pZ)
setCameraMatrix(pX,pY,pZ,x,y,z)
end

function drawCur()
dxDrawLine((screenX/2),(screenY/2)-size/2,(screenX/2),(screenY/2)+size/2,tocolor(255,0,0,200),3)
dxDrawLine((screenX/2)-size/2,(screenY/2),(screenX/2)+size/2,(screenY/2),tocolor(255,0,0,200),3)
end

function activate(theCar,seat)
if getElementModel(theCar) == 469 and seat > 0 then
addEventHandler("onClientCursorMove",getRootElement(),getCoords)
addEventHandler("onClientPreRender",getRootElement(),setCoords)
addEventHandler("onClientRender",getRootElement(),drawCur)
object = createObject(362,0,0,0)
timer = setTimer(shoot,100,0)
end
end

function deActivate(theCar,seat)
if getElementModel(theCar) == 469 and seat > 0 then
removeEventHandler("onClientCursorMove",getRootElement(),getCoords)
removeEventHandler("onClientPreRender",getRootElement(),setCoords)
removeEventHandler("onClientRender",getRootElement(),drawCur)
destroyElement(object)
setCameraTarget(thePlayer)
killTimer(timer)
end
end

function shoot()
if getControlState("fire") then
hit,hitX,hitY,hitZ,hitElement = processLineOfSight(pX,pY,pZ,x,y,z)
fxAddBulletImpact(hitX,hitY,hitZ,0,0,1,3,5)
if hitElement then
triggerServerEvent("setHp",hitElement,hitElement)
end
end
end

addEventHandler("onClientPlayerVehicleEnter",getRootElement(),activate)
addEventHandler("onClientPlayerVehicleExit",getRootElement(),deActivate)
Вот на этом и закончился мой первый пост. В ближайшее время, вы сможете скачать все мои завершенные ресурсы с этого сайта, ну а пока я говорю вам пока, и предлагаю вам следить за обновлениями моего блога :)

1 комментарий:

  1. побольше бы таких. ток для начинающих можно бы и коментарии добавлять.

    ОтветитьУдалить