-
Posts
619 -
Joined
-
Last visited
Everything posted by Flaker
-
Уже был там, и не только... Я просто не понял как с помощью table.insert (table, [pos,] value) Вставить несколько значений именно в одну строку, причем в самый конец таблицы.
-
Как создать ped который будет стрелять по ближайшему игроку? Мой ped почему то крутится в обратную от игрока сторону... (Хотя после создания, первую пулю он выпускает в игрока) Посмотрите пожалуйста код, в чем ошибка? Серверная часть: (Создание педа) ped = {} ped_n = 1 function create_Ped(playerSource) --Создаем педа local rotz = getPedRotation(playerSource) local x,y,z = getElementPosition(playerSource) -- Определяем позицию перед игроком x = x + ( math.cos ( math.rad ( rotz+90 ) ) * 3) y = y + ( math.sin ( math.rad ( rotz+90 ) ) * 3) if (x) and (y) then --Если позиция существует, тогда создать педа ped[ped_n] = createPed ( 120, x, y, z ) if (ped[ped_n]) then --Если пед создан, тогда giveWeapon ( ped[ped_n], 31, 20000 ) --Выбать оружие педу (M4) setPedWeaponSlot ( ped[ped_n], 5 ) --Поставить слот с этим оружием (Rifle) triggerClientEvent(playerSource,"fire",playerSource,ped[ped_n]) --Заставить Ped стрелять local nameTag = getPlayerNametagText ( playerSource ) outputDebugString ("Ped "..ped_n.." was created by: "..nameTag) ped_n = ped_n+1 else outputDebugString ( "Ped wasn't created") end else outputDebugString ( "X or Y wasn't find") end end addCommandHandler ( "ped", create_Ped) Клиентская часть: (Стрельба педа) local Max_Dist = 150 --Максимальная дистанция до цели local length = 100 --Длительность таймера, который отвечает за изменение "setPedControlState" addEvent("fire",true) addEventHandler("fire",root, function (thePed) setTimer ( gunShoot, length + 200, 0, thePed) end ) function gunShoot(thePed) --Функция стрельбы педа if (isElement(thePed)) then local theTarget, dist, enemyPos_x, enemyPos_y, enemyPos_z = getNearestTarget(thePed) local name_target = getPlayerName ( theTarget ) if isPedDucked(theTarget) then --Если Цель присела, тогда setPedAimTarget ( thePed, enemyPos_x, enemyPos_y, enemyPos_z-.5 ) else setPedAimTarget ( thePed, enemyPos_x, enemyPos_y, enemyPos_z ) end setPedControlState ( thePed, "fire", true ) setTimer ( function (thePed) if ( isElement ( thePed ) ) then setPedControlState ( thePed, "fire", false) end end, length, 1, thePed ) --Таймер, который чередует setPedControlState else outputDebugString ("There isn't thePed") end end function getNearestTarget(thePed) --Функция, получения, ближайшего к элементу, игрока. local Min_Dist = Max_Dist --Минимальная дистанция равна Максимальной for _,target in ipairs(getElementsByType("player")) do --Начинаем перебирать всех игроков (Текущим перебирающимся игроком является Target) local pedhp = getElementHealth ( thePed ) if (getElementType(target) == "player") and (isPlayerDead(target) == false) and (pedhp > 0) then --Если цель это игрок, он жив тогда local px,py,pz=getElementPosition(thePed) local tx,ty,tz=getElementPosition(target) local isclear = isLineOfSightClear (px,py,pz+.6, tx,ty,tz+.6, true, false, false, true, false, false, false) if (isclear == true) then --Если от педа до цели нет объектов тогда local distance = getDistanceBetweenPoints3D (px,py,pz,tx,ty,tz) --Получаем дистанцию между игроком и педом if (distance) then if (distance < Min_Dist) then Min_Dist = math.floor(distance) NearestTarget = target cor_x,cor_y,cor_z = getElementPosition(NearestTarget) end end end end end return NearestTarget, Min_Dist, cor_x, cor_y, cor_z --Возвращяем Ближайшего игрока, дистанцию до него, и его координаты. end
-
Как добавить в конец таблицы, строку из нескольких значений. Что бы таблица получалась примерно такого вида: local t = { {1, "lol"}; }
-
Понял, спасибо) С Lua вот знакомлюсь понемногу. Вобще дело в том, что Lua, по сути, мой первый язык програмирования. Раньше только в школе на информатике Visual Basic немного изучал.
-
Этот геморой мне для того, что бы значение какой либо переменной для каждого игрока было разным. Вот наткнулся какрас на скрипт нивидимости, там переменная iv использовалась как проверка, невидим ли игрок? Но так как скипт выполняется на серверной стороне, для всех игроков сервера, переменная принимала одно и тоже значение. В ниже указанном топике, Castillo исправил эту проблемму, с помощью использования в названии переменной, элемент игрока. ( iv [ thePlayer ] = 1) https://forum.multitheftauto.com/viewtopic.php?f=91&t=43217&p=435847&hilit=invisible#p435847 (2 пост)
-
Ну допустим у объекта может быть динамическое имя? Тоесть допустим с помощью команды /lo игрок создает объект какой-то. А имя объекта будет object[playername], playername это типа текст ника игрока, ну строковая переменная вобщем. Ну вот можно же вроде таким образом имена переменным задавать?
-
1) А как вывести не рандомный текст? Так?: print(aMarkers[1][4][3]) 2) Как можно сделать проверку на наличие какого-то определенно текста?
-
А почему ты задаешь math.random странно как-то, тут же только цифра нужна вроде. Тоесть если print(markers[1][4][1]) будет работать, то можно math.random задать так: rn = math.random(1,4)
-
1) Если из XML получить "position" или "text" данные, то в каком виде они прочитаются скриптом? (Не раздельно? Как строка?) "111, 222, 333" /> "Hi, Try, Dry" /> 2) Можно делать такие названия переменных?: x = 1 Object[x] = createObject(...) или такие: x = "Тапки" Object[x] = createObject(...)
-
Народ, подскажите пожалуйста...
-
Такой функции нет. Но ты можешь сам переписать этот "Спавнер", что бы он сохранял скин игрока. Для сохранения можно использовать setElementData
-
А можно ли сделать, что бы текст разный был? Ну тоесть подпункты какие нибудь, с разными выражениями, а оттуда рандомно выбирается текст... Может как-то так? markers = { {1212.222, -1932.142,1242.963,("TEXT1", "LOOL", "GL&HF")} {1212.222, -1932.142,1242.963,("TEXT2", "LOL", "GLHF")} } И еще, могу ли я создать маркер вот так: local markers = { {"first_marker",1212.222, -1932.142,1242.963,("TEXT1", "LOOL", "GL&HF")}; {"second_marker", 1212.222, -1932.142,1242.963,("TEXT2", "LOL", "GLHF")}; } markers[1][1] = createMarker( 123, 213, 321 ) markers[2][1] = createMarker( 123, 213, 321 ) или вот как: marker_[markers[1][1] ] = createMarker( 123, 213, 321 ) Можно так создавать?
-
Как сделать проверку на наличие игроков внутри маркера?
-
Воо, вроде то, что надо! Спасибо огромное)
-
Возможно ли реализовать поиск по массиву? Примерно что я хочу сделать: При заходе на маркер пишет определенное сообщение, которое записанно в таблице. Вот код таблицы: markers = { {"Marker1", 1212.222, -1932.142,1242.963,"TEXT"} {"Marker2", 1212.222, -1932.142,1242.963,"TEXT2"} } Ну маркеры создаются по координатам в таблице. Так вот, как сделать что бы при входе на маркер, определялось на какой маркер вошел игрок, и в зависимости от маркера выводило сообщение из массива? Вобщем, как определить в массиве столбец маркера, на который зашел игрок? P.S. Только не надо предлагать: if source == Marker2 then markers[2][2]
-
Ошибся, конечно .db
-
Подскажите, как работать с базами данных? Тут вот несколько вопросов накопилось по SQLite: 1) Как создать свою .bd (SQLite Database Browser имеется, я там создал, но она без расширения .bd создалась. Ошибка? Неправильно создал?) 2) При использовании: executeSQLCreateTable executeSQLDelete executeSQLDropTable executeSQLInsert executeSQLQuery executeSQLSelect executeSQLUpdate С какой базой работаешь? registry.db? 3) В каком порядке выполнять подключение и получение/сохранение данных в базу. P.S. Если есть какой то примерчик, был бы очень благодарен.
-
У меня просто эти переменные переходят из скрипта в скрипт. Как сначала назывались, так и называются по сей день. Но спасибо за такую заметку, теперь при названии буду учитывать тип переменной.
-
Хотя у меня все работало, я чуть изменил код. (Проверил. Работает.) Теперь осталось узнать, заработает ли у тебя... P.S. Копируй аккуратно! Server: local marker_countdown = createMarker( -703.15, 955.92, 12.1, "cylinder", 2, 255, 255, 0, 200) function marker_countdown_hit( thePlayer ) if source == marker_countdown then triggerClientEvent (thePlayer, "start_countdown", getRootElement()) end end addEventHandler ( "onMarkerHit",getRootElement(),marker_countdown_hit ) Client: local sWidth,sHeight = guiGetScreenSize() n=2 --начало обратного отсчета nSpeedCount = 1000 --Скорость смены цифр (Стандартно: 1000мс (1 секунда)) nSize = 4 --Размер цифр sFont = "bankgothic" --Шрифт цифр nColor_R, nColor_G, nColor_B, nColor_A = 0, 255, 0, 255 --Цвет и прозрачность цифр (RGBA) function count_render () if not(n <= -1) then dxDrawText ( tostring(n), sWidth, sHeight*0.37, 1, 1, tocolor ( nColor_R, nColor_G, nColor_B, nColor_A ), nSize,sFont,"center","top",false,false,true,false,false) else removeEventHandler("onClientRender", source, count_render) --Убираем рэндер end end function start_countdown () setTimer(function () n=n-1 end,nSpeedCount,n+1) addEventHandler("onClientRender", source, count_render) --Запускаем Рэндер end addEvent( "start_countdown", true ) addEventHandler( "start_countdown", getRootElement(), start_countdown )
-
Settings -> Interface -> Skin: Lighter Blue Насчет кода Countdown: странно..., у меня работало все... Щас перепроверю полностью. Полностью разделяю твое мнение.
-
562141, Твой Countdown, не самый оптимальный вариант. Я вот тут набросал тебе, как было бы более правильно сделать. (Не утверждаю, что данный вариант самый правильный) Если хочешь, забирай себе (Copy -> Past) P.S. Я не проверял, будут ли при попадании на маркер цифры для всех игроков, или только для источника. Но по идее только для источника должны (если я не ошибся с trigerClientEvent). * Для отображения цифр я использовал dxDrawText * Переменная n, отвечает за цифру, с которой начинается обратный отсчет * Я попытался сделать, что бы цифры были в центре экрана, но тоже не уверен что получилось. Client Side: local sWidth,sHeight = guiGetScreenSize() -- The variables n=5 --начало обратного отсчета nSize = 4 --Размер цифр nFont = "bankgothic" --Шрифт цифр nColor_R, nColor_G, nColor_B, nColor_A = 0, 255, 0, 255 --Цвет и прозрачность цифр (RGBA) function count_render () if not(n == -1) then dxDrawText ( tostring(n), sWidth, sHeight*0.37, 1, 1, tocolor ( nColor_R, nColor_G, nColor_B, nColor_A ), nSize,nFont,"center","top",false,false,true,false,false) else removeEventHandler("onClientRender", source, count_render) --Убираем рэндер end end function start_countdown () setTimer(function () n=n-1 end,1000,n+1) addEventHandler("onClientRender", source, count_render) --Запускаем Рэндер end addEvent( "start_countdown", true ) addEventHandler( "start_countdown", getRootElement(), start_countdown ) Server side: local marker_countdown = createMarker( -703.15, 955.92, 12.1, "cylinder", 2, 255, 255, 0, 200) function marker_countdown_hit( thePlayer ) if source == marker_countdown then triggerClientEvent (thePlayer, "start_countdown", getRootElement()) end end addEventHandler ( "onMarkerHit",getRootElement(),marker_countdown_hit )
-
Тогда все таки дестроить объект, более правильный вариант?
-
На вкус и цвет, товарищей нет...