Jump to content

YND

Members
  • Posts

    34
  • Joined

  • Last visited

Everything posted by YND

  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"
  15. function getMarkers ( idMarkerGet ) return markers[idMarkerGet] end UPD: Но, не хочет работать...
  16. В серверном файле находится массив из маркеров. А в клиентском файле мне нужно узнать, стоит ли игрок в маркере ( isElementWithinMarker() ). Как передать элемент маркера (массив элементов) из серверного файла в клиентский? + Функция, в которой находится isElementWithinMarker(), вызывается из другого ресурса через call.
  17. Просто из вас учитель никакой.. Из одного поста Kernell я многое понял, а вы лишь пишите, что код ужасен, что у меня знания нулевые, да и к тому же не читаете предыдущие комментарии. Такой "учитель" ни одному новичку не нужен, ибо вот из-за такого "учителя" они подумают что это не ихнее и забросят сие дело.
  18. Да, но у вас вроде наоборот клиент посылает пакет на сервер, клиент не может за всех игроков отправить (поэтому там и нет этого "первого" аргумента). Да. Ещё обратите внимание, что событие не может быть вызвано, если source выходит за пределы дерева указанного в addEventHandler. Ну насколько я понял, то функция будет работать только у тех, кто ниже елемента указанного в addEventHandler.. (Ну и самого этого указанного елемента) Спасибо.
  19. Полного прозрения не нашло, но это пока самый полезный пост в этой теме Спасибо. Если я первым аргументом в triggerClientEvent укажу root, то когда кто-нибудь введет (в моем случае) комманду /spwcar и выберет автомобиль, то он заспавнится около каждого игрока ? Чтобы sourc'ом был игрок - какой надо указать второй аргумент ? localPlayer ?
  20. https://wiki.multitheftauto.com/index.ph ... ement_tree Что нужно указать вместо root, чтобы source был клиентом ? ЧТо такое дерево я понимаю, но в каком случае использовать root, а в каком что-то иное - не очень..
  21. Не копипастну, ибо этот спавн каров начал лишь для того, чтобы учить lua, а так он мне не нужен .. Если бы вы мне внятно пояснили где использовать root, а где что-то другое... И что все же ужасного в моем коде ?
  22. Откуда localPlayer ? Я его через триггер передал, сколько раз писать... Kenix предлагал мне использовать source - его то я и использовал, но он не работает.. По идее, если source - это игрок который передал через триггер переменные, то source должен быть равен localPlayer.. На клиенте вы дописали local .. На сервере: Как же tonumber(idspwcar) , он же в текстовом виде передается.. vehicleNamespw вы убрали.. В итоге вы просто уменьшили код (я, как любой начинающий растянул код) и убрали переменную vehicleNamespw.. Спасибо за "client" (если работает..), так как source не работает.. Ужасного кода у себя я не вижу..
  23. Клиент: --Передаем id на серв < function carspawnguispw ( button ) if button == "left" then selectgridlist = guiGridListGetSelectedItem (GUIEditor.gridlist[1]) idspwcar = guiGridListGetItemText (GUIEditor.gridlist[1], selectgridlist, GUIEditor.addcol[1]) triggerServerEvent("zaspwcar", getRootElement(), localPlayer, idspwcar) -- outputChatBox(idspwcar) guiSetVisible(GUIEditor.window[1], false) showCursor(false) -- guiSetInputEnabled(false) end end --Передаем id на серв > Сервер: function zaspwncarto(localPlayer, idspwcar) outputChatBox(source) -- 00000001 outputChatBox(localPlayer) -- 0000002F local spwcarid = tonumber(idspwcar) local px,py,pz = getElementPosition(source) px = px + 5 local createdVehicle = createVehicle(spwcarid,px,py,pz) local vehicleNamespw = getVehicleNameFromModel (spwcarid) if (createdVehicle == false) then outputChatBox(vehicleNamespw.." не заспавнен.",source) else outputChatBox(vehicleNamespw.." заспавнен.",source) end end addEvent("zaspwcar",true) addEventHandler("zaspwcar",root,zaspwncarto) source выводит 00000001, а localPlayer - 0000002F.. Координаты у source выходят 0 0 0
  24. Что такое дерево я понимаю.. Только что посмотрел множество примеров с евентами - всюду использовать root ?? (Кроме всяких GUIroot).. Если нет, то покажите, пожалуйста, пример, где евент с root'ом и где евент с другим значением и почему там другое значение.. P.s. getRootElement и root - одно и тоже же ?
×
×
  • Create New...