rafull6 Posted June 25, 2011 Share Posted June 25, 2011 Всем привет. Ребята подскажите пожалуйста следующий скрипт. Смысл его заключается в том что при использовании команды /attach [id] [x] [y] [z] [rx] [ry] [rz] перед автомобилем (или другим транспортом). Например: /attach 1225 0 10 0 0 0 0 приклеит к транспорту взрывоопасную бочку как на скриншоте: Но смысл в том что бы можно было клеить любые объекты используя /attach [Объект] [x] [у] [z] [rx] [ry] [rz] Где найти такой скрипт? (Помогите пожалуйста, я в LUA на самых начальных ступеньках и если для вас это элементарно, то для меня это целое достижение ) Link to comment
TEDERIs Posted June 25, 2011 Share Posted June 25, 2011 Например так (серверный скрипт): addCommandHandler ( "attach", function ( player, command, model, offX, offY, offZ, offRX, offRY, offRZ ) local vehicle = getPedOccupiedVehicle ( player ) if vehicle then model, offX, offY, offZ, offRX, offRY, offRZ = tonumber ( model ), tonumber ( offX ), tonumber ( offY ), tonumber ( offZ ), tonumber ( offRX ), tonumber ( offRY ), tonumber ( offRZ ) if model and offX and offY and offZ and offRX and offRY and offRZ then local x, y, z = getElementPosition ( vehicle ) local object = createObject ( model, x + offX, y + offY, z + offZ ) if object then attachElements ( object, vehicle, offX, offY, offZ, offRX, offRY, offRZ ) else outputChatBox ( "Вы не можете создать объект с таким ID", player ) end else outputChatBox ( "Синтаксис: /attach [model] [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) end else outputChatBox ( "Вы должны находиться в транспортном средстве", player ) end end ) Link to comment
rafull6 Posted June 25, 2011 Author Share Posted June 25, 2011 Например так (серверный скрипт): addCommandHandler ( "attach", function ( player, command, model, offX, offY, offZ, offRX, offRY, offRZ ) local vehicle = getPedOccupiedVehicle ( player ) if vehicle then model, offX, offY, offZ, offRX, offRY, offRZ = tonumber ( model ), tonumber ( offX ), tonumber ( offY ), tonumber ( offZ ), tonumber ( offRX ), tonumber ( offRY ), tonumber ( offRZ ) if model and offX and offY and offZ and offRX and offRY and offRZ then local x, y, z = getElementPosition ( vehicle ) local object = createObject ( model, x + offX, y + offY, z + offZ ) if object then attachElements ( object, vehicle, offX, offY, offZ, offRX, offRY, offRZ ) else outputChatBox ( "Вы не можете создать объект с таким ID", player ) end else outputChatBox ( "Синтаксис: /attach [model] [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) end else outputChatBox ( "Вы должны находиться в транспортном средстве", player ) end end ) не работает(((( Link to comment
TEDERIs Posted June 25, 2011 Share Posted June 25, 2011 Как не работает?! Ты точно на серверной стороне его запускаешь? Link to comment
MX_Master Posted June 25, 2011 Share Posted June 25, 2011 он же на первых ступеньках лестницы скриптинга Link to comment
rafull6 Posted June 25, 2011 Author Share Posted June 25, 2011 Пардон, все работает! Спасибо тебе большое!!!!!! Link to comment
rafull6 Posted June 25, 2011 Author Share Posted June 25, 2011 Скрипт работает отлично. Я попытался добавить команду на удаление (взял с другого подобного ресурса) всех приклеенных объектов, но ничего не вышло, скрипт перестал работать. Вот что у меня получилось: addCommandHandler ( "attach", function ( player, command, model, offX, offY, offZ, offRX, offRY, offRZ ) local vehicle = getPedOccupiedVehicle ( player ) if vehicle then model, offX, offY, offZ, offRX, offRY, offRZ = tonumber ( model ), tonumber ( offX ), tonumber ( offY ), tonumber ( offZ ), tonumber ( offRX ), tonumber ( offRY ), tonumber ( offRZ ) if model and offX and offY and offZ and offRX and offRY and offRZ then local x, y, z = getElementPosition ( vehicle ) local object = createObject ( model, x + offX, y + offY, z + offZ ) if object then attachElements ( object, vehicle, offX, offY, offZ, offRX, offRY, offRZ ) else outputChatBox ( "You can't use this ID", player ) end else outputChatBox ( "Command: /attach [model] [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) end else outputChatBox ( "You must to be in a car!", player ) end end ) addCommandHandler ( "del", function ( thePlayer, commandName ) if ( isPedInVehicle ( thePlayer )) then local vehicle = getPedOccupiedVehicle ( thePlayer ) local allAttachedElements = getAttachedElements ( vehicle ) outputChatBox ( "All elements which was attached to you was sucefully destroyed!", thePlayer, 255,200,0 ) for i,v in pairs ( allAttachedElements ) do destroyElement ( v ) end end ) P.S. а как сделать что бы при разрушении автомобиля с него пропадали все приклеенные объекты? Link to comment
TEDERIs Posted June 25, 2011 Share Posted June 25, 2011 addCommandHandler ( "del", function ( thePlayer ) local vehicle = getPedOccupiedVehicle ( thePlayer ) if vehicle then for _, element in ipairs ( getAttachedElements ( vehicle ) ) do destroyElement ( element ) end outputChatBox ( "Все прикрепленные объекты успешно удалены", thePlayer ) else outputChatBox ( "Вы должны находиться в транспортном средстве", thePlayer ) end end ) Для удаления объектов при взрыве авто можно использовать соответствующее событие. Например: addEventHandler ( "onVehicleExplode", getRootElement ( ), function ( ) for _, element in ipairs ( getAttachedElements ( source ) ) do destroyElement ( element ) end end ) Link to comment
rafull6 Posted June 25, 2011 Author Share Posted June 25, 2011 TEDERIs, спасибо тебе большое! Ты не представляешь как ты мне помог!) СПАСИБО Link to comment
killer100 Posted July 12, 2011 Share Posted July 12, 2011 TEDERIs, а как сделать если написать /attach name id и объект прикрепится к игроку, но если его авто взорвётся, или он умрёт(допустим в рейс моде), то объект пропадёт? И если написать /attach killer 0, то объект пропадёт. Link to comment
TEDERIs Posted July 12, 2011 Share Posted July 12, 2011 TEDERIs, а как сделать если написать /attach name id и объект прикрепится к игроку, но если его авто взорвётся, или он умрёт(допустим в рейс моде), то объект пропадёт? И если написать /attach killer 0, то объект пропадёт. local l_root = getRootElement ( ) function destroyAttachedObjects ( element, command, arg1, arg2 ) if command == "attach" and ( arg1 ~= "killer" or arg2 ~= "0" ) then outputChatBox ( "Синтаксис: /attach killer 0" ) return end if not isElement ( element ) then element = source end local elementType = getElementType ( element ) if elementType == "vehicle" or elementType == "player" then if elementType == "player" and isPedInVehicle ( element ) then element = getPedOccupiedVehicle ( element ) end for _, attachedElement in ipairs ( getAttachedElements ( element ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end end end addEventHandler ( "onVehicleExplode", l_root, destroyAttachedObjects ) addEventHandler ( "onPlayerWasted", l_root, destroyAttachedObjects ) addCommandHandler ( "attach", destroyAttachedObjects ) Например так можно решить этот вопрос, если конечно я правильно тебя понял. Link to comment
killer100 Posted July 12, 2011 Share Posted July 12, 2011 Ты не понял меня, я имел ввиду если написать /attach player_name id то объект прикрепится к автомобилю игрока. Пример: /attach TEDERIs 3458, то объект 3458 прикрепляется к твоему автомобилю. А если написать /attach TEDERIs 0, то у тебя убирается этот объект. И что бы объекты убирались тоже, когда ты упал в воду и умер(это в рейс моде) или твой автомобиль взорвался. Link to comment
TEDERIs Posted July 12, 2011 Share Posted July 12, 2011 Можно вот так попробовать: addCommandHandler ( "attach", function ( player, command, playername, model, offX, offY, offZ, offRX, offRY, offRZ ) if playername then local targetPlayer = getPlayerFromName ( playername ) if targetPlayer then local targetVehicle = getPedOccupiedVehicle ( targetPlayer ) if targetVehicle then model = tonumber ( model ) if model then if model == 0 then for _, attachedElement in ipairs ( getAttachedElements ( targetVehicle ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end else offX, offY, offZ, offRX, offRY, offRZ = tonumber ( offX ), tonumber ( offY ), tonumber ( offZ ), tonumber ( offRX ), tonumber ( offRY ), tonumber ( offRZ ) if offX and offY and offZ and offRX and offRY and offRZ then local x, y, z = getElementPosition ( targetVehicle ) local object = createObject ( model, x + offX, y + offY, z + offZ ) if object then attachElements ( object, targetVehicle, offX, offY, offZ, offRX, offRY, offRZ ) else outputChatBox ( "Вы не можете создать объект с такой моделью", player ) end else outputChatBox ( "Вы должны указать смещение объекта [Xoffset] [Yoffset] [Zoffset] [RXoffset] [RYoffset] [RZoffset]", player ) end end else outputChatBox ( "Вы должны указать модель объекта или 0 для его удаления", player ) end else outputChatBox ( "Игрок должен находиться в автомобиле", player ) end else outputChatBox ( "Игрока с таким именем не существует", player ) end else outputChatBox ( "Вы должены указать имя игрока", player ) end end ) local l_root = getRootElement ( ) function destroyAttachedObjects ( ) if getElementType ( source ) == "vehicle" then for _, attachedElement in ipairs ( getAttachedElements ( source ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end end end addEventHandler ( "onVehicleExplode", l_root, destroyAttachedObjects ) addEventHandler ( "onElementDestroy", l_root, destroyAttachedObjects ) /attach PLAYER_NAME MODEL OFFSET_X OFFSET_Y OFFSET_Z OFFSET_RX OFFSET_RY OFFSET_RZ При смерти игрока через событие невозможно найти авто, нужно дописывать скрипт. Но и без того, для чистки от объектов вполне достаточно события уничтожения автомобиля. Link to comment
killer100 Posted July 12, 2011 Share Posted July 12, 2011 При смерти игрока через событие невозможно найти авто, нужно дописывать скрипт. Но и без того, для чистки от объектов вполне достаточно события уничтожения автомобиля. Но в рейс моде обязательно нужно что бы при смерти игрока объект пропадал, а то этот объект будет с ним постоянно, но и за это спасибо. Link to comment
TEDERIs Posted July 12, 2011 Share Posted July 12, 2011 Если я не ошибаюсь, в рэйс моде при смерти игрока авто через некоторое время удаляется. Следовательно, при удалении авто объекты будут также уничтожены. Если хочешь, можешь завести таблицу и записывать в нее последние авто игроков. Потом через событие onPlayerWasted с помощью этой таблицы найти авто и удалить с него объекты. Link to comment
killer100 Posted July 12, 2011 Share Posted July 12, 2011 TEDERIs всё работает, в рейс моде после рестарта карты объект удаляется, спасибо тебе, но вот есть проблемка, больно долго вводить /attach PLAYER_NAME MODEL OFFSET_X OFFSET_Y OFFSET_Z OFFSET_RX OFFSET_RY OFFSET_RZ, можно как нибудь сократить до: /attach PLAYER_NAME MODEL ? может можно как нибудь указать смещение в скрипте 0 5 0 0 0 0 ? Link to comment
TEDERIs Posted July 12, 2011 Share Posted July 12, 2011 Конечно можно addCommandHandler ( "attach", function ( player, command, playername, model ) if playername then local targetPlayer = getPlayerFromName ( playername ) if targetPlayer then local targetVehicle = getPedOccupiedVehicle ( targetPlayer ) if targetVehicle then model = tonumber ( model ) if model then if model == 0 then for _, attachedElement in ipairs ( getAttachedElements ( targetVehicle ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end else local x, y, z = getElementPosition ( targetVehicle ) local object = createObject ( model, x, y + 5, z ) if object then attachElements ( object, targetVehicle, 0, 5, 0, 0, 0, 0 ) else outputChatBox ( "Вы не можете создать объект с такой моделью", player ) end end else outputChatBox ( "Вы должны указать модель объекта или 0 для его удаления", player ) end else outputChatBox ( "Игрок должен находиться в автомобиле", player ) end else outputChatBox ( "Игрока с таким именем не существует", player ) end else outputChatBox ( "Вы должены указать имя игрока", player ) end end ) local l_root = getRootElement ( ) function destroyAttachedObjects ( ) if getElementType ( source ) == "vehicle" then for _, attachedElement in ipairs ( getAttachedElements ( source ) ) do if isElement ( attachedElement ) and getElementType ( attachedElement ) == "object" then destroyElement ( attachedElement ) end end end end addEventHandler ( "onVehicleExplode", l_root, destroyAttachedObjects ) addEventHandler ( "onElementDestroy", l_root, destroyAttachedObjects ) Link to comment
killer100 Posted July 12, 2011 Share Posted July 12, 2011 Спасибо тебе большое TEDERIs, ты классный скриптер! Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now