AMARANT Posted January 8, 2014 Share Posted January 8, 2014 hitPlayer в твоем случае. Link to comment
Bzz335 Posted January 8, 2014 Share Posted January 8, 2014 Спс! ни пашит gate = createObject ( 980, 272, 2509.7, 17.95, 0, 0, 90 ) markerforgate = createMarker ( 272, 2509, 16, "cylinder", 9, 0, 0, 0, 0 ) function moveGate( hitPlayer, matchingDimension,playerSource) local swat = getTeamFromName ( "S.W.A.T" ) local playerTeam = getPlayerTeam ( hitPlayer ) local ss = getTeamName ( playerTeam ) if ss=="S.W.A.T" then moveObject(gate, 2000, 272, 2509.7, 9.5) setTimer(moveBack, 2500, 1) else outputDebugString("ss") end end addEventHandler("onMarkerHit", markerforgate, moveGate) Link to comment
AMARANT Posted January 8, 2014 Share Posted January 8, 2014 gate = createObject ( 980, 272, 2509.7, 17.95, 0, 0, 90 ) markerforgate = createMarker ( 272, 2509, 16, "cylinder", 9, 0, 0, 0, 0 ) function moveGate( hitPlayer, matchingDimension ) local playerTeam = getPlayerTeam ( hitPlayer ) local ss = getTeamName ( playerTeam ) if ss=="S.W.A.T" then moveObject(gate, 2000, 272, 2509.7, 9.5) setTimer(moveBack, 2500, 1) else outputDebugString("ss") end end addEventHandler("onMarkerHit", markerforgate, moveGate) Должно работать. Убедись что название команды правильно проверяешь и не пропустил там точку или еще что. Link to comment
nikitafloy Posted January 9, 2014 Share Posted January 9, 2014 Буду очень признателен и благодарен. debug: attempt to concatenate 'CPc' ( nil value ) local CPc = cols[CP] local Благодарю. Но теперь, либо я не могу понять логику и делаю не так, либо я точно делаю не так, может и поможете, кто поопытнее меня. Дэбаг молчит. local prisoners = {} -- Создаю таблицу function sitPr ( thePlayer, cmd, Psource, toTime ) for _, aclGr in ipairs ( { 'Security', 'FBI' } ) do if ( isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( thePlayer )), aclGetGroup ( aclGr ) ) == true ) then if ( isElementWithinColShape ( thePlayer, fP ) ) then local occup = getPedOccupiedVehicle ( thePlayer ) if ( occup ) then if ( toTime ) then local toTime = tonumber(toTime) local Psource = getPlayerFromName ( Psource ) if ( pC[ getElementModel( getPedOccupiedVehicle ( thePlayer ) ) ] ) then if ( toTime < 30 ) then local rnd = math.random ( 1, #habz ) if ( getVehicleOccupant ( occup, 2 ) ) then local account = getPlayerAccount ( Psource ) local oldskin = setAccountData ( account, 'oldskin', tostring (getElementModel ( Psource )) ) local oldfgt = setAccountData ( account, 'oldfgt', tostring (getPedFightingStyle ( Psource )) ) takePlayerMoney ( Psource, 15000 ) givePlayerMoney ( thePlayer, 15000 ) setTimer (fadeCamera, 2000, 1, Psource, true) setTimer (function() spawnPlayer ( Psource, habz[rnd][1], habz[rnd][2], 1004, 90, 299, 3, 0 ) setCameraTarget ( Psource ) end, 2000, 1 ) prisoners[#prisoners+1] = {toTime, Psource} -- Получаю длину таблицы и добавляю новый элемент в виде {Время, имя игрока}. setTimer ( function() for _, i in pairs (prisoners) do -- получаю таблицу того же вида. Psource = i[2] -- 'говорю', что имя игрока это данные всех таблиц под номером 2. toTimeTo = i[1] -- 'говорю', что время до выхода игрока это данные всех таблиц под номером 1. if toTimeTo == toTime then -- если время равно времени выхода через toTime, когда таймер истекает, назначенный заранее, чтобы посадить человека. Иными словами, если срок истекает, то... elseif toTimeTo < toTime then -- Или, если вдруг получилось, что время выхода игрока < времени назначенного заранее командой для посаженного Psource, тогда мы его выпускаем. (5 < 30) (Здесь логика моя отключилась, ибо такого быть не должно) local account = getPlayerAccount ( Psource ) local lodskin = getAccountData ( account, 'oldskin' ) local ofgt = getAccountData ( account, 'oldfgt' ) setPedFightingStyle ( Psource, tostring (ofgt) ) setCameraTarget ( Psource ) spawnPlayer ( Psource, 2290.19995, 2430.5, 10.8, 180, tostring (lodskin), 0, 0 ) prisoners[Psource] = nil -- table.remove ( ) - замена, но как она используется? elseif toTimeTo > toTime then -- или, если время до выхода больше, чем время, указанное для другого заключенного, тогда получаем таймер у первого if isTimer(toTimeTo) then -- если он существует, то toTime = toTimeTo -- ставим время для него setTimer (function() local account = getPlayerAccount ( Psource ) local lodskin = getAccountData ( account, 'oldskin' ) local ofgt = getAccountData ( account, 'oldfgt' ) setPedFightingStyle ( Psource, tostring (ofgt) ) setCameraTarget ( Psource ) spawnPlayer ( Psource, 2290.19995, 2430.5, 10.8, 180, tostring (lodskin), 0, 0 ) prisoners[Psource] = nil -- table.remove ( ) end, toTime*60000, 1 ) -- Теперь через некоторое время его выпустят else outputChatBox ( 'No1.' ) end else outputChatBox ( 'No2.' ) end end end, toTime*60000, 1) elseif ( getVehicleOccupant ( occup, 3 ) ) then ... end end end end end end end end end addCommandHandler ( 'sPr', sitPr ) Что будет в сл. циклах я боюсь представить. Link to comment
Bzz335 Posted January 9, 2014 Share Posted January 9, 2014 Спс.. Дебаг ругается,но работает. http://s33-temporary-files.radikal.ru/5 ... 693455.png Link to comment
AMARANT Posted January 9, 2014 Share Posted January 9, 2014 Спс..Дебаг ругается,но работает. http://s33-temporary-files.radikal.ru/5 ... 693455.png Дебаг будет ругаться когда в маркер будет въезжать например машина. И у машины как бы тоже не может быть принадлежности к команде. Дело в том что в твоем коде аргумент 'hitPlayer' на самом деле является не игроком, а элементом. Поэтому еще стоит сделать проверку на тип элемента. И само название переменной лучше бы сделать hitElement, чтоб не путаться. Link to comment
Bzz335 Posted January 9, 2014 Share Posted January 9, 2014 Спасибо за грамотное объяснение. Link to comment
Bzz335 Posted January 11, 2014 Share Posted January 11, 2014 Как сделать неуязвимого бота(ped)><? Ещё вопрос: local money={ [1]={math.random(150,400)}, [2]={math.random(400,600)}, [3]={math.random(600,800)}, [4]={math.random(800,1000)}, [5]={math.random(800,1000)}, [6]={math.random(800,1000)}, } Есть таблица с некими числами,как их сделать в такой функции,что-то вроде этого: givePlayerMoney(thePlayer,money[1]) ____ У меня что-то с википедией,кароч..( Link to comment
AMARANT Posted January 11, 2014 Share Posted January 11, 2014 Как сделать неуязвимого бота(ped)><? При атаке педа отменять действие. function cancelPedDamage ( attacker ) cancelEvent() -- cancel any damage done to peds end addEventHandler ( "onClientPedDamage", getRootElement(), cancelPedDamage ) Есть таблица с некими числами,как их сделать в такой функции,что-то вроде этого: givePlayerMoney(thePlayer,money[1][1][1]) Link to comment
Bzz335 Posted January 12, 2014 Share Posted January 12, 2014 Спасибо,амарант. Просто делаю что-то вроде простенькой системы полиции.Осталось сделать только GUI,обязательно добавлю Вас в "кредиты",как и товарища "Castillo". Link to comment
N1kS Posted January 13, 2014 Share Posted January 13, 2014 Как сделать неуязвимого бота(ped)><? При атаке педа отменять действие. function cancelPedDamage ( attacker ) cancelEvent() -- cancel any damage done to peds end addEventHandler ( "onClientPedDamage", getRootElement(), cancelPedDamage ) Только не забудьте вместо root указать конкретного педа, т.к будет отменять аттаку по всем педам, а возможно вам нужен будет конкретный. addEventHandler ( "onClientPedDamage", pPed--[[ Тут ваш пед ]], cancelPedDamage ) Link to comment
Jonathan.P Posted January 13, 2014 Share Posted January 13, 2014 Господа, нужна функция для проверки повёрнут ли игрок лицом к элементу(с погрешностью пусть 30 градусов). Я имею ввиду не камеру, не голову, а сам скин. Дано: 1)Позиция игрока 2)Поворот игрока 3)Позиция элемента Я думаю кто-то да затрагивал этот вопрос. Вроде бы простая задачка из школьного курса информатики. В Пэинте я нарисовал наглядно, как это должно выглядеть. Последнюю систему я записал логическим выражением, но оно не работает. Возможно я где-то ошибся, а может уже есть готовая функция. Картинка Ваши мысли, господа? P.S.: При вычислении тангенса я НЕ забыл перевести всё в радианы. Также дельта альфа пусть равно 30 градусам. Под ElementRotation'ом я подразумеваю поворот относительно оси Z(я знаю, что функция возвращает три значения(x,y,z)). Link to comment
Kenix Posted January 13, 2014 Share Posted January 13, 2014 Господа, нужна функция для проверки повёрнут ли игрок лицом к элементу isElementOnScreen и никаких велосипедов Link to comment
Jonathan.P Posted January 13, 2014 Share Posted January 13, 2014 isElementOnScreen и никаких велосипедов Да видел я такую функцию. Даже специально написал: Я имею ввиду не камеру, не голову, а сам скин Да, я знаю, придётся танцевать с бубнами. Link to comment
TheNormalnij Posted January 14, 2014 Share Posted January 14, 2014 Предположу, что так. Код не тестировал. function isPedRotationToPoint( el, px, py, pz, accuracy ) -- назовите функцию сами if type( el ) == 'userdata' and isElement( el ) and type( px ) == 'number' and type( py ) == 'number' and type( pz ) == 'number' then local x, y, z, = getElementPosition ( el ) local rotalion = ( 360 - math.deg ( math.atan2 ( ( x - px ), ( y - py ) ) ) ) % 360 local _, _, currentRotation = getElementRotation( el ) return math.abs( currentRotation - rotation ) < accuracy and true or false end return false end Link to comment
Jonathan.P Posted January 14, 2014 Share Posted January 14, 2014 return math.abs( currentRotation - rotation ) < accuracy and true or false end Если так, но функция возвращает true когда игрок наоборот отвёрнут от точки. Я поменял знак. Работает но не так как надо. Дело в том, что значению true соответствует огромный(!) угол, в то время когда false - совсем малый угол, т.е. когда игрок смотрит в сторону точно противоположную стороне точке(а должно быть наоборот, значению true - меньший угол(переменная accuracy)). Но мы приблизились к цели. Link to comment
Jonathan.P Posted January 14, 2014 Share Posted January 14, 2014 Я знал что проблема в знаках углах\позиций, стал перебирать, пробовать разные варианты. Знак больше\меньше оставил как и был сначала. А вот строчку local rotation = ( 360 - math.deg ( math.atan2 ( ( x - px ), ( y - py ) ) ) ) % 360 заменил на local rotation = ( 360 - math.deg ( math.atan2 ( ( px - x ), ( py - y ) ) ) ) % 360 И всё работает как надо! В итоге готовая функция: function isPedRotationToPoint( el, px, py, pz, accuracy ) -- назовите функцию сами if type( el ) == 'userdata' and isElement( el ) and type( px ) == 'number' and type( py ) == 'number' and type( pz ) == 'number' then local x, y, z = getElementPosition(el) local rotation = ( 360 - math.deg ( math.atan2 ( ( px - x ), ( py - y ) ) ) ) % 360 local _, _, currentRotation = getElementRotation( el ) return math.abs( currentRotation - rotation ) < accuracy and true or false end return false end Спасибо за помощь, TheNormalnij. Link to comment
Kernell Posted January 16, 2014 Share Posted January 16, 2014 Хорошо бы ещё ошибку выводить в дебаг при не правильном вводе аргументов, иначе при опечатке вы долго будете искать проблему function IsPedRotationInPoint( pPed, fX, fY, fZ, fAccuracy ) if not isElement( pPed ) then error( "type mismatch in argument #1", 2 ); end -- 2 - это уровень, т.е. ошибка будет там где вызвали функцию if type( fX ) ~= "number" then error( "type mismatch in argument #2", 2 ); end if type( fY ) ~= "number" then error( "type mismatch in argument #3", 2 ); end if type( fZ ) ~= "number" then error( "type mismatch in argument #4", 2 ); end if type( fAccuracy ) ~= "number" then error( "type mismatch in argument #5", 2 ); end local fPedX, fPedY = getElementPosition( pPed ); local fAngle = ( 360 - math.deg( math.atan2( ( fX - fPedX ), ( fY - fPedY ) ) ) ) % 360; local fRotX, fRotY, fRotZ = getElementRotation( pPed ); return math.abs( fRotZ - fAngle ) < fAccuracy; end Link to comment
Jonathan.P Posted January 20, 2014 Share Posted January 20, 2014 Спасибо! 1)Можно ли скриптом удалить все объекты определенной модели с сервера, а на их место поставить другой объект определенной модели(не замененной, а стандартной)? 2)Почему эвенты "onVehicleExit", "onPlayerVehicleExit" не срабатывают, когда игрок помирает в машине? Как с этим бороться? Что интересно, на эвенте "onPlayerWasted" игрок уже как бы не в машине, т.е. isPedInVehicle даёт false. Link to comment
FranklinRoosevelt Posted January 20, 2014 Share Posted January 20, 2014 Проблема связана с MySQL. local mysqlhost = "localhost" local mysqluser = "root" local mysqlpasword = "" local mysqldatebase = "house" function connect() [u] [b]datebase = mysql_connect(mysqlhost, mysqluser, mysqlpasword, mysqldatebase)[/b][/u] end addEventHandler ( "onResourceStart", resourceRoot, connect ) addEventHandler("onResourceStart", getResourceRootElement(), function() [u] [b]handler = dbConnect("mysql", "dbname="..mysqldatebase..";host="..mysqlhost, mysqluser, mysqlpassword, "autoreconnect=1")[/b][/u] end) На код не обращайте внимание, суть: в первой попытке подключится (datebase) ошибка, ну как бы "nill value". Со второй (handler) все хорошо, объясните как подключатся правильно через "mysql_connect" или скиньте норм туториал, и какая вообще между ними разница в коде, заранее спасибо. Link to comment
Other Languages Moderators Disinterpreter Posted January 20, 2014 Other Languages Moderators Share Posted January 20, 2014 Проблема связана с MySQL. local mysqlhost = "localhost" local mysqluser = "root" local mysqlpasword = "" local mysqldatebase = "house" function connect() [u] [b]datebase = mysql_connect(mysqlhost, mysqluser, mysqlpasword, mysqldatebase)[/b][/u] end addEventHandler ( "onResourceStart", resourceRoot, connect ) addEventHandler("onResourceStart", getResourceRootElement(), function() [u] [b]handler = dbConnect("mysql", "dbname="..mysqldatebase..";host="..mysqlhost, mysqluser, mysqlpassword, "autoreconnect=1")[/b][/u] end) На код не обращайте внимание, суть: в первой попытке подключится (datebase) ошибка, ну как бы "nill value". Со второй (handler) все хорошо, объясните как подключатся правильно через "mysql_connect" или скиньте норм туториал, и какая вообще между ними разница в коде, заранее спасибо. "nil value" - вероятно вы не скачали модуль mysql ибо mysql_connect работает только с модулем. P.S для кода используйте тег [lua] Link to comment
FranklinRoosevelt Posted January 20, 2014 Share Posted January 20, 2014 Проблема связана с MySQL. local mysqlhost = "localhost" local mysqluser = "root" local mysqlpasword = "" local mysqldatebase = "house" function connect() [u] [b]datebase = mysql_connect(mysqlhost, mysqluser, mysqlpasword, mysqldatebase)[/b][/u] end addEventHandler ( "onResourceStart", resourceRoot, connect ) addEventHandler("onResourceStart", getResourceRootElement(), function() [u] [b]handler = dbConnect("mysql", "dbname="..mysqldatebase..";host="..mysqlhost, mysqluser, mysqlpassword, "autoreconnect=1")[/b][/u] end) На код не обращайте внимание, суть: в первой попытке подключится (datebase) ошибка, ну как бы "nill value". Со второй (handler) все хорошо, объясните как подключатся правильно через "mysql_connect" или скиньте норм туториал, и какая вообще между ними разница в коде, заранее спасибо. "nil value" - вероятно вы не скачали модуль mysql ибо mysql_connect работает только с модулем. P.S для кода используйте тег [lua] А можно по подробней об этом модуле mysql? Link to comment
N1kS Posted January 20, 2014 Share Posted January 20, 2014 А можно по подробней об этом модуле mysql? Подробнее тут: https://wiki.multitheftauto.com/wiki/Mysql Link to comment
FranklinRoosevelt Posted January 22, 2014 Share Posted January 22, 2014 А можно по подробней об этом модуле mysql? Подробнее тут: https://wiki.multitheftauto.com/wiki/Mysql Огромное спасибо, не видел этот раздел. P.S.: УРААА, все заработало, огромное спасибо, надо было просто закинуть в папку один файлик и всее.. Link to comment
Jonathan.P Posted January 25, 2014 Share Posted January 25, 2014 Вопрос. Когда я использую guiGridListRemoveRow сдвигаются ли остальные строчки? Основная задача: реализация списка элементов определенного типа, добавление и удаление нужного элемента, и вытаскивание элемента из списка при нажатии кнопки. Я использовал массив в клиенте, где номер массива - guiGridListRow, а значение - элемент. НО у меня не получается синхронно сопоставить guiGridListRow и элемент. Что я сейчас могу сделать: при удалении \ добавления элемента в список, очищать весь список и заново добавлять нужные элементы. Есть другие варианты? ps: возможно проблема в table.remove(table1, i) \ table1 = nil, хотя я и так и так пробовал. 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