Jump to content

YND

Members
  • Posts

    34
  • Joined

  • Last visited

YND's Achievements

Rat

Rat (9/54)

0

Reputation

  1. Что в таком случае делать? isLineOfSightClear говорит, что все чисто, на внешний вид препятствий нет, но пули летят в стол. UPD: дело даже не в столе, он и впритык стреляет, но не попадает. Буду искать причину.. function sellerAim(player, ped) if getElementType(player) == "player" and getElementType(ped) == "ped" then local pedhp = getElementHealth ( ped ) if pedhp > 0 and (isPlayerDead(player) == false) then local x,y,z = getElementPosition( player ) local ex,ey,ez = getElementPosition( ped ) local isclear = isLineOfSightClear (ex, ey, ez+.5, x, y, z+.5, true, false, false, true, false, false, false) if (isclear == true) then if isPedDucked(player) then setPedAimTarget ( ped, x, y, z-.2 ) dxDrawLine3D (ex, ey, ez+.5, x, y, z-.2) else setPedAimTarget ( ped, x, y, z ) dxDrawLine3D (ex, ey, ez+.5, x, y, z+.5) end end setTimer ( sellerAim, 80, 1, player, ped ) else setPedControlState(getElementByID("Ammo1Seller"), "fire", false) end end end setPedAimTarget лучше вызывать с помощью setTimer (каждые n миллисекунд) или с помощью onClientPreRender? Просто событие, по-идее, будет срабатывать для каждого элемента, а не только для педов (а уж потом в функции проверять, пед ли это), коих довольно-таки много.
  2. Спасибо. Но если отменить эвент, то анимация один раз применится и больше эта функция никогда не вызовется; это же лучше, чем если она будет вызываться каждый раз, когда пед в стриме, ведь анимация все равно остается. Разве не так? function startPeds( ) if getElementType( source ) == "ped" then setPedAnimation( source, "SHOP", "SHP_Serve_Idle" ) removeEventHandler("onClientElementStreamIn", source, startPeds) end end addEventHandler("onClientElementStreamIn", resourceRoot, startPeds) И еще: есть ли вместо "resourceRoot" какой-нибудь "элемент-родитель", который указывал бы на всех педов ресурса? Чтобы заставить педа атаковать игрока, нужно ручками направлять прицел не игрока, пускать огонь и т.д.? Или есть какая-нибудь функция? Понял, ручками.
  3. Помогите же Если до вызова функции я не видел в лицо педа, независимо от задержки её выполнения/рестарта ресурса, то к нему анимация не применяется. Почему так? Что делать? Не выполнять же эту функцию, когда кто-нибудь увидит этого педа, а потом отменять евент, ерунда же..
  4. Продублирую тут, так как в "Примеры" никто, видимо, не заходит. Нужно заменить текстуру объекта: addEventHandler ( 'onClientResourceStart', resourceRoot, function() txd_deletedAmmo = engineLoadTXD ( "txd/2notherbuildsfe.txd" ) engineImportTXD ( txd_deletedAmmo, 18034 ) if engineImportTXD ( txd_deletedAmmo, 18041 ) == true then outputChatBox "Текстура загрузилась" else outputChatBox "ТЕКСТУРА НЕ ЗАГРУЗИЛАСЬ" end end ) <meta> <info author="noob" name="ammoResource" version="1.0" type="script" /> <oop>true</oop> <script src="buyammo.lua" type="client" /> <file src="txd/2notherbuildsfe.txd" type="client" /> </meta> Рядом с "meta.xml" папка "txd", в которой файл "2notherbuildsfe.txd". В чат выводит, что "Текстура загрузилась", но на самом деле изменений нет. id проверял. Что я делаю не так? UPD: что за.., ничего не работает: addEventHandler("onResourceStart", resourceRoot, function() for _, ammoSeller in ipairs ( getElementsByType ( "ped" ) ) do outputChatBox (getElementData(ammoSeller, "id")) --выводит id ammoSeller'a setPedAnimation ( ammoSeller, "SHOP", "SHP_Serve_Idle" ) end end ) Файл серверный, id педа выводит, а анимация не применяется, ровно как и оружие не дается..
  5. addEventHandler ( 'onClientResourceStart', resourceRoot, function() txd_deletedAmmo = engineLoadTXD ( "txd/2notherbuildsfe.txd" ) engineImportTXD ( txd_deletedAmmo, 18034 ) if engineImportTXD ( txd_deletedAmmo, 18041 ) == true then outputChatBox "Текстура загрузилась" else outputChatBox "ТЕКСТУРА НЕ ЗАГРУЗИЛАСЬ" end end ) <meta> <info author="noob" name="ammoResource" version="1.0" type="script" /> <oop>true</oop> <script src="buyammo.lua" type="client" /> <file src="txd/2notherbuildsfe.txd" type="client" /> </meta> Рядом с "meta.xml" папка "txd", в которой файл "2notherbuildsfe.txd". В чат выводит, что "Текстура загрузилась", но на самом деле изменений нет. id проверял. Что я делаю не так?
  6. У меня есть таблица созданных пикапов pickup[1]; pickup[2]...pickup[n]. Как прикрепить к ним событие "onPickupHit"? Прицепить его к "pickup" не вышло. Прицеплять к каждому - не вариант. Прицепить к руту - есть пикапы, для которых не нужно, чтобы срабатывало событие, а делать так, наверное, глупо. Что тогда делать? for i=1, ido if source == pickup[i] then --code return end end Табуляцию не могу сделать, так как пишу прямо тут. UPD: Как сделать видимым пикап, лишь для одного игрока? gamePickup[1] = createPickup (830.70001, -872.79999, 68.8, 107.9, 3, 1247); setElementVisibleTo (gamePickup[1], root, false); setElementVisibleTo (gamePickup[1], thePlayer, true); Так жалуется, что первый аргумент - bool, но почему так?
  7. Снимаю шляпу перед вами. Очень хорошо все расписано. ИМХО, стоит подредактировать и добавить в уроки.
  8. Так работает: local cars = {} local cars_meta = { __call = function(self, car) --<<<<<< setVehiclePaintjob (car, 2) --<<<<<< end } setmetatable(cars, cars_meta) addCommandHandler("mt", function() cars(cars[1]) -- тут я cars[1] передаю в качестве аргумента end) А так выдает, что "call method 'cars' - nil". local cars = {} local cars_meta = { __call = function(self) --<<<<<< setVehiclePaintjob (self, 2) --<<<<<< end } setmetatable(cars, cars_meta) addCommandHandler("mt", function() cars[1]:cars() -- а тут пытаюсь переда, как self end) Этот код мне самому непонятен, но ошибка такая, что первый аргумент setVehiclePaintjob - таблица. Т.е. функция вызывается, но self != cars[2] local cars = {} local cars_meta = {__call = function(returncar) return returncar end} --<<<<<< setmetatable(cars, cars_meta) function cars:Nulled() setVehiclePaintjob (self, 2) end addCommandHandler("mt", function() cars[1] = cars(cars[1) --<<<<<< cars[1]:Nulled() end) Так же непонятно, почему без строки "vec1 = Vector3( 192, 168, 0 );" ваша функция "Vector3:Nulled" не вызовется, а с ней - вызывается?
  9. Это понятно, непонятно то, как сделать одну функцию для n объектов. Т.е. есть, например, функция: function cars:delDoor(args) --body end Для конкретного объекта можно её вызвать так (но в данном случае self = cars): cars:delDoor(carMustang) cars:delDoor(carBus) cars:delDoor(carBullet) Но как её вызвать так?: carMustang:delDoor() carBus:delDoor() carBullet:delDoor()
  10. cars = {} cars_prototype = {model = 566, x = 1421.6, y = -1345.9, z = 13.6 , rx = 0, ry = 0, rz = 0, carText = "Text"} cars_meta = {__index = cars_prototype} function cars:new (o) o = o or {} setmetatable(o, cars_meta) return createVehicle(o.model,o.x,o.y,o.z,o.rx,o.ry,o.rz,o.carText) end function cars:paintjob setVehiclePaintjob (self, 2) end addCommandHandler("mtcv", function() for i=1, 2 do cars[i] = cars:new{model = 560, carText = "Sultan"} end end) addCommandHandler("mt", function cars[1]:paintjob end) Восьмой час уже пытаюсь разобраться в мета-таблицах, ООП и пр. Сдаюсь. Допустим мне нужно поменять Paintjob конкретной машины. Как вызвать функцию cars:paintjob так, чтобы self был cars[1] ? Передавать отдельным аргументом не вариант. Возможно ли?
  11. А чем он небезопасен? Просто если делать по вашему примеру, то придется каждый раз проверять все (100-1000) маркеров на "isElementWithinMarker()", что, как мне кажется, более ресурсоёмко, чем 2 лишних эвента, не так ли?
  12. Спасибо за ответ, но как я понял, каждый раз придется проверять каждый маркер на "isElementWithinMarker()". Поэтому, буду использовать эвенты onClientMarkerHit и onClientMarkerLeave, и записывать их с помощью setElementData(localPlayer, "inMarker", source) Если так делать не стоит, напишите, пожалуйста.
  13. "idMarkerGet" равен ведь "test text", значит getMarkers должен вернуть "test text", но, не возвращает.
  14. Спасибо. Не будет ли это слишком ресурсоёмко, при большом количестве маркеров? UPD: В серверном файле, где создаются маркеры, в консоль выводит "corona", а в клиентском файле, не выводит "так как outputDebugString - bollean ". outputDebugString(getMarkerIcon(getElementByID("marker name"))) UPD2: И мой первый вариант не работает. В "Ybuilding/meta.xml" прописано: function="getMarkers" type="server" /> В серверном файле: function getMarkers ( idMarkerGet ) return idMarkerGet end И при вызове функции из клиентского файла outputDebugString(getMarkers("test text")) выдает, мол "глобальный getMarkers возвращает nil"
×
×
  • Create New...