YND
Members-
Posts
34 -
Joined
-
Last visited
YND's Achievements
Rat (9/54)
0
Reputation
-
Что в таком случае делать? 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? Просто событие, по-идее, будет срабатывать для каждого элемента, а не только для педов (а уж потом в функции проверять, пед ли это), коих довольно-таки много.
-
Спасибо. Но если отменить эвент, то анимация один раз применится и больше эта функция никогда не вызовется; это же лучше, чем если она будет вызываться каждый раз, когда пед в стриме, ведь анимация все равно остается. Разве не так? function startPeds( ) if getElementType( source ) == "ped" then setPedAnimation( source, "SHOP", "SHP_Serve_Idle" ) removeEventHandler("onClientElementStreamIn", source, startPeds) end end addEventHandler("onClientElementStreamIn", resourceRoot, startPeds) И еще: есть ли вместо "resourceRoot" какой-нибудь "элемент-родитель", который указывал бы на всех педов ресурса? Чтобы заставить педа атаковать игрока, нужно ручками направлять прицел не игрока, пускать огонь и т.д.? Или есть какая-нибудь функция? Понял, ручками.
-
Помогите же Если до вызова функции я не видел в лицо педа, независимо от задержки её выполнения/рестарта ресурса, то к нему анимация не применяется. Почему так? Что делать? Не выполнять же эту функцию, когда кто-нибудь увидит этого педа, а потом отменять евент, ерунда же..
-
Продублирую тут, так как в "Примеры" никто, видимо, не заходит. Нужно заменить текстуру объекта: 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 педа выводит, а анимация не применяется, ровно как и оружие не дается..
-
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 проверял. Что я делаю не так?
-
Strix, благодарю.
-
У меня есть таблица созданных пикапов 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, но почему так?
-
Снимаю шляпу перед вами. Очень хорошо все расписано. ИМХО, стоит подредактировать и добавить в уроки.
-
Так работает: 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" не вызовется, а с ней - вызывается?
-
Это понятно, непонятно то, как сделать одну функцию для n объектов. Т.е. есть, например, функция: function cars:delDoor(args) --body end Для конкретного объекта можно её вызвать так (но в данном случае self = cars): cars:delDoor(carMustang) cars:delDoor(carBus) cars:delDoor(carBullet) Но как её вызвать так?: carMustang:delDoor() carBus:delDoor() carBullet:delDoor()
-
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] ? Передавать отдельным аргументом не вариант. Возможно ли?
-
А чем он небезопасен? Просто если делать по вашему примеру, то придется каждый раз проверять все (100-1000) маркеров на "isElementWithinMarker()", что, как мне кажется, более ресурсоёмко, чем 2 лишних эвента, не так ли?
-
Спасибо за ответ, но как я понял, каждый раз придется проверять каждый маркер на "isElementWithinMarker()". Поэтому, буду использовать эвенты onClientMarkerHit и onClientMarkerLeave, и записывать их с помощью setElementData(localPlayer, "inMarker", source) Если так делать не стоит, напишите, пожалуйста.
-
"idMarkerGet" равен ведь "test text", значит getMarkers должен вернуть "test text", но, не возвращает.
-
Спасибо. Не будет ли это слишком ресурсоёмко, при большом количестве маркеров? 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"