Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Как вычислить попадание из оружия по транспорту?

Если стреляет игрок, то - https://wiki.multitheftauto.com/wiki/OnClientPlayerWeaponFire, там есть параметр hitElement, который содержит указатель на элемент, в который попал игрок.

Если стреляет созданное оружие, то скорее всего придется проверять через https://wiki.multitheftauto.com/wiki/GetWeaponTarget

Link to comment

Спасибо за ваши советы, буду пробывать. Только вот еще подскажите функцию для возврата длины строки, кроме '#' и 'string.len'

А то при:

  
addEventHandler("onClientChatMessage", getRootElement(), 
    function(message) 
        outputChatBox(tostring(string.len(message))) 
    end 
) 
  

У меня выходит:

a0bf4aa42bffd6e47aa7d8f8b84b0f72.png

Link to comment

Мне кажется, я немного идиот.

Надо было не в "onClientChatMessage"(Помимо там у меня выходило еще пару серверных сообщений), а в "onPlayerChat".

Теперь работает и с решеткой, и с "string.len", и с "utfLen". Спасибо :)

Link to comment
Здравствуйте. Когда время анимации ставишь на нуль, то пед получает возможность бегать и вообще передвигаться с анимацией. Так вот, а если я ставлю параметр loop на false, то в конце анимации у педа "замораживаются" руки, и отмораживаются только когда он прыгнет, сядет в машину и пр. Так вот, как разморозить их в конце анимации без физ. манипуляций? Пробовал таймером обнулить анимку: setPedAnimation(source) - не помогает. Желательно конечно обнулить её в самом конце.

UP!

Решил проблему сам. Нашел на английском форуме тему:

https://forum.multitheftauto.com/viewtopic.php?f=91&t=27586

После анимки поставил таймер на анимацию:

setTimer(setPedAnimation, 5000, 1, source, "BSKTBALL","BBALL_idle_O", 1, false, false, true, false) 

которую посоветовал чувак. Еще он писал, мол все анимки блокируют звуки бега, и этого не избежать. Но ведь это 2010 год, а сейчас можно заюзать параметр 'freezeLastFrame'(он последний) и поставить его на 'false' - звуки появляются сразу после окончания "полезной" нам анимки. Да, пробовал юзать этот параметр на этой самой нужной мне анимке - не выходит, она останавливается моментально (видимо конфликтует с нулевым временем).

Остается одна проблема:

Угадать с временем таймера, т.е. с окончанием анимации - что видимо невозможно на программном уровне. Приходится прикидывать.

Link to comment

Проблема. Создал таблицу, где ключ - игрок. Не могу удалить запись по функции:

table.remove(textsToDraw,source) 

Может это быдлокод и извращенство - использовать в качестве ключа элемент?

Как поступить?

Link to comment

Это не быдлокод, это незнание языка и/или не внимательное чтение документации. table.insert \ table.remove для работы с таблицей как с массивом.

в вашем случае поможет только textsToDraw[ source ] = nil;

Link to comment
theVehicle = createVehicle(600, 2530.413, -1710.22, 13.323, 0, 0, 0, "SpawN") 
setElementData(theVehicle,"rocket",true) 
zenit = createObject(3884, 2530.621, -1715.385, 12.489) 
attachElements(zenit, theVehicle, 0,-1.8,-0.5) 
  
function bindKeyStartFire() 
bindKey(source,"1","down",startfireRocket) 
end 
addEventHandler("onPlayerJoin", getRootElement(),bindKeyStartFire) 
  
function startfireRocket(source) 
 if isPedInVehicle(source) then 
  local vehicle = getPedOccupiedVehicle(source) 
  if getElementData(vehicle,"rocket") == true then 
   if getVehicleController(vehicle) == source then 
    local x,y,z = getElementPosition(vehicle) 
    local rx,ry,rz = getVehicleRotation(vehicle)     
     if getElementData(vehicle,"rocket_Progress") == 100 then 
      triggerClientEvent("fireRocket", getRootElement(), source, x, y, z, rz,vehicle) 
     else 
      playSoundFrontEnd(source,5)    
      outputChatBox("#CC0033[СЕРВЕР]: #339933 Прогресс востоновления зенитной установки не завершон! Осталось "..tostring(100 - getElementData(vehicle,"rocket_Progress"))..".", source, 0, 0, 0,true) 
     end 
   end   
  end  
 end 
end 
  
function explodeZUvehicle() 
 if getVehicleOccupant(source) then 
 local player = getVehicleOccupant(source) 
  if (getElementData(source,"rocket") == true) then 
   triggerClientEvent(player, "destroiGui", getRootElement(),player) 
  end 
 end  
end 
addEventHandler("onVehicleExplode", getRootElement(), explodeZUvehicle) 
  
function moveZenit(Rz) 
setElementAttachedOffsets(zenit, 0,-1.8,-0.5, 0,0,Rz) 
end 
addEvent("moveZenit", true) 
addEventHandler("moveZenit", getRootElement(), moveZenit) 

Данная функция устанавливает на транспорт Picador зинитку, возможно ли поменять функцию вместо зинитки, пулемёт с прицелом?

Link to comment
  • Other Languages Moderators
theVehicle = createVehicle(600, 2530.413, -1710.22, 13.323, 0, 0, 0, "SpawN") 
setElementData(theVehicle,"rocket",true) 
zenit = createObject(3884, 2530.621, -1715.385, 12.489) 
attachElements(zenit, theVehicle, 0,-1.8,-0.5) 
  
function bindKeyStartFire() 
bindKey(source,"1","down",startfireRocket) 
end 
addEventHandler("onPlayerJoin", getRootElement(),bindKeyStartFire) 
  
function startfireRocket(source) 
 if isPedInVehicle(source) then 
  local vehicle = getPedOccupiedVehicle(source) 
  if getElementData(vehicle,"rocket") == true then 
   if getVehicleController(vehicle) == source then 
    local x,y,z = getElementPosition(vehicle) 
    local rx,ry,rz = getVehicleRotation(vehicle)     
     if getElementData(vehicle,"rocket_Progress") == 100 then 
      triggerClientEvent("fireRocket", getRootElement(), source, x, y, z, rz,vehicle) 
     else 
      playSoundFrontEnd(source,5)    
      outputChatBox("#CC0033[СЕРВЕР]: #339933 Прогресс востоновления зенитной установки не завершон! Осталось "..tostring(100 - getElementData(vehicle,"rocket_Progress"))..".", source, 0, 0, 0,true) 
     end 
   end   
  end  
 end 
end 
  
function explodeZUvehicle() 
 if getVehicleOccupant(source) then 
 local player = getVehicleOccupant(source) 
  if (getElementData(source,"rocket") == true) then 
   triggerClientEvent(player, "destroiGui", getRootElement(),player) 
  end 
 end  
end 
addEventHandler("onVehicleExplode", getRootElement(), explodeZUvehicle) 
  
function moveZenit(Rz) 
setElementAttachedOffsets(zenit, 0,-1.8,-0.5, 0,0,Rz) 
end 
addEvent("moveZenit", true) 
addEventHandler("moveZenit", getRootElement(), moveZenit) 

Данная функция устанавливает на транспорт Picador зинитку, возможно ли поменять функцию вместо зинитки, пулемёт с прицелом?

Возможно.

Link to comment
theVehicle = createVehicle(600, 2530.413, -1710.22, 13.323, 0, 0, 0, "SpawN") 
setElementData(theVehicle,"rocket",true) 
zenit = createObject(3884, 2530.621, -1715.385, 12.489) 
attachElements(zenit, theVehicle, 0,-1.8,-0.5) 
  
function bindKeyStartFire() 
bindKey(source,"1","down",startfireRocket) 
end 
addEventHandler("onPlayerJoin", getRootElement(),bindKeyStartFire) 
  
function startfireRocket(source) 
 if isPedInVehicle(source) then 
  local vehicle = getPedOccupiedVehicle(source) 
  if getElementData(vehicle,"rocket") == true then 
   if getVehicleController(vehicle) == source then 
    local x,y,z = getElementPosition(vehicle) 
    local rx,ry,rz = getVehicleRotation(vehicle)     
     if getElementData(vehicle,"rocket_Progress") == 100 then 
      triggerClientEvent("fireRocket", getRootElement(), source, x, y, z, rz,vehicle) 
     else 
      playSoundFrontEnd(source,5)    
      outputChatBox("#CC0033[СЕРВЕР]: #339933 Прогресс востоновления зенитной установки не завершон! Осталось "..tostring(100 - getElementData(vehicle,"rocket_Progress"))..".", source, 0, 0, 0,true) 
     end 
   end   
  end  
 end 
end 
  
function explodeZUvehicle() 
 if getVehicleOccupant(source) then 
 local player = getVehicleOccupant(source) 
  if (getElementData(source,"rocket") == true) then 
   triggerClientEvent(player, "destroiGui", getRootElement(),player) 
  end 
 end  
end 
addEventHandler("onVehicleExplode", getRootElement(), explodeZUvehicle) 
  
function moveZenit(Rz) 
setElementAttachedOffsets(zenit, 0,-1.8,-0.5, 0,0,Rz) 
end 
addEvent("moveZenit", true) 
addEventHandler("moveZenit", getRootElement(), moveZenit) 

Данная функция устанавливает на транспорт Picador зинитку, возможно ли поменять функцию вместо зинитки, пулемёт с прицелом?

Возможно.

Можно узнать, как?

Link to comment

1) Если я setPedAnimation пропишу в клиенте, будет ли анимация видна другим игрокам? (не нашел инфы о синхронизации)

2) Если я заюзаю функцию setPlayerName, изменится ли в настройках у клиента ник?

3) Если игрок изменит ник в настройках(во время игры), то потом функция getPlayerName будет возвращать старый или новый ник(если всё это время игрок не перезаходил)?

Link to comment
1) Нет

2) Нет

3) Новый

Насчет 1) и 2) пока поверю. А вот насчет 3) всё очень странно: проверил - возвращает старый ник. Притом возвращает и клиент, и сервер, даже после рестарта ресурса. Новый возвращает только если игрок перезайдет. Но я засомневался. Оказывается дело в том что у меня в другом(!) ресурсе стоит cancelEvent() на евенте 'onPayerCommand' когда игрок вводит команду /nick (изменить ник). Т.е. изменить ник командой /nick и изменить ник через настройки - это одно и то же.

Link to comment
hasObjectPermissionTo 

будте хорошими кодурами.

А...Эм... Вылетела мысль....

Выше кидали то же самое. Вроде, что-то здесь должно быть по-другому, как мне показалось. Сейчас посмотрю...

Ах, да..

Это не для команд выполнения, а для маркера. Заходишь на маркер - идет проверка. Сразу же вопрос по теме маркеров. Эвент выполняется при условии, если игрок зашел на маркер. Но что делать, если их >1? Получается, что он будет выполнять самую первую функцию...

Link to comment
Если имеется ввиду кол-во эвентов, то все будут работать. Можно для них еще поставить приоритет, если требуется.

Благодарю.

Как осуществить работу полиции - оглушение игрока с 1 удара, имитация наручников, посадить игрока.

На счет посадить - Есть тюрьма, это точка, нужно вычислить разность между позициями игрока и тюрьмы. Т.е. мент приводит игрока в тюрьму, где перед ним несколько камер. Мент вводит команду /p 1, например, и игрока сажает spawnPlayer на позицию тюрьмы #1. Там уже таймер включается, которой освобождает его через опр. время. Опять же респаунит на улицу, например.

И можно ли заблочить двери для игрока, если он находится в полицейском автомобиле?

Не любитель РП, просто задумка пришла для РПГ.

Link to comment

Прошу помощи!

EDF:

  
<element name="bizEntry"> 
    <data name="refid" type="element:bizReturn" required="true" default="" /> 
    <data name="position" type="coord3d" required="true" default="0,0,0" /> 
    <data name="rotation" type="coord3d" required="true" default="0,0,0" /> 
    <data name="interior" type="integer" default="0" /> 
    <data name="dimension" type="integer" default="0" /> 
    <marker position="!position!" type="arrow" size="2.2" color="#e1ff00c8" interior="!interior!" dimension="!dimension!"/> 
</element> 
  

MAP:

  
<map> 
    <bizEntry id="default" refid="default" posX="1456.77" posY="-1138.02" posZ="23.2872" rotation="0" dimension="0" interior="0" /> 
</map> 
  

Почему маркер не создается автоматом? Как это сделать? Чертов edf, так толком и не разберешься.

Link to comment

Здравсьвуйте! Подскажите,есть допустим ресурс который при вызове комманды /cveh вызывает настройки!

Как реализовать его вызов в моем скрипте? Пробовал exec-ом почему то не вышло! Я новичек и только учусь,скрипт вызываеться с клиента через тригер,на клиенте через exec работает,но там не возможно сделать проверку так как вызов идет через elseif,заранее благодарен за ответ!

Сам скрипт:

function cvehcmd () 
  if (isPedInVehicle (source)) then 
    local veh = getPedOccupiedVehicle (source) 
    if  outputChatBox ("Настройки открыты.", source, 255, 0, 0) then 
     
end 
else 
outputChatBox ("Вы не в автомобиле!", source, 255, 0, 0) 
end 
end 
addEvent("cvehcmd",true) 
addEventHandler("cvehcmd",getRootElement(),cvehcmd) 

Link to comment
Здравсьвуйте! Подскажите,есть допустим ресурс который при вызове комманды /cveh вызывает настройки!

Как реализовать его вызов в моем скрипте? Пробовал exec-ом почему то не вышло! Я новичек и только учусь,скрипт вызываеться с клиента через тригер,на клиенте через exec работает,но там не возможно сделать проверку так как вызов идет через elseif,заранее благодарен за ответ!

Сам скрипт:

function cvehcmd () 
  if (isPedInVehicle (source)) then 
    local veh = getPedOccupiedVehicle (source) 
    if  outputChatBox ("Настройки открыты.", source, 255, 0, 0) then 
     
end 
else 
outputChatBox ("Вы не в автомобиле!", source, 255, 0, 0) 
end 
end 
addEvent("cvehcmd",true) 
addEventHandler("cvehcmd",getRootElement(),cvehcmd) 

Тебе нужна проверка на машину ? А зачем проверяешь сработает ли outputChatbox ?

function cvehcmd (source) 
    if (isPedInVehicle (source)) then -- находится ли игрок в транспорте 
        local veh = getPedOccupiedVehicle (source) 
        outputChatBox ("Настройки открыты.", source, 255, 0, 0)-- ниже выполняешь нужные тебе действия 
    else 
        outputChatBox ("Вы не в автомобиле!", source, 255, 0, 0) 
    end 
end 
addEvent("cvehcmd",true) 
addEventHandler("cvehcmd",getRootElement(),cvehcmd)-- у тебя ивент, но судя по названию ты хотел команду.  addCommandHandler функция, смотри вики 

Link to comment
Здравсьвуйте! Подскажите,есть допустим ресурс который при вызове комманды /cveh вызывает настройки!

Как реализовать его вызов в моем скрипте? Пробовал exec-ом почему то не вышло! Я новичек и только учусь,скрипт вызываеться с клиента через тригер,на клиенте через exec работает,но там не возможно сделать проверку так как вызов идет через elseif,заранее благодарен за ответ!

Сам скрипт:

function cvehcmd () 
  if (isPedInVehicle (source)) then 
    local veh = getPedOccupiedVehicle (source) 
    if  outputChatBox ("Настройки открыты.", source, 255, 0, 0) then 
     
end 
else 
outputChatBox ("Вы не в автомобиле!", source, 255, 0, 0) 
end 
end 
addEvent("cvehcmd",true) 
addEventHandler("cvehcmd",getRootElement(),cvehcmd) 

Тебе нужна проверка на машину ? А зачем проверяешь сработает ли outputChatbox ?

function cvehcmd (source) 
    if (isPedInVehicle (source)) then -- находится ли игрок в транспорте 
        local veh = getPedOccupiedVehicle (source) 
        outputChatBox ("Настройки открыты.", source, 255, 0, 0)-- ниже выполняешь нужные тебе действия 
    else 
        outputChatBox ("Вы не в автомобиле!", source, 255, 0, 0) 
    end 
end 
addEvent("cvehcmd",true) 
addEventHandler("cvehcmd",getRootElement(),cvehcmd)-- у тебя ивент, но судя по названию ты хотел команду.  addCommandHandler функция, смотри вики 

Ага спасибо но мне тут нужно что-бы сработала команда из дургого ресурса ( как пример ресурс который при вводе команды /cveh открывает настройки автомобиля) так вот как вызвать комманду?

Link to comment

Тебе нужна проверка на машину ? А зачем проверяешь сработает ли outputChatbox ?

function cvehcmd (source) 
    if (isPedInVehicle (source)) then -- находится ли игрок в транспорте 
        local veh = getPedOccupiedVehicle (source) 
        outputChatBox ("Настройки открыты.", source, 255, 0, 0)-- ниже выполняешь нужные тебе действия 
    else 
        outputChatBox ("Вы не в автомобиле!", source, 255, 0, 0) 
    end 
end 
addEvent("cvehcmd",true) 
addEventHandler("cvehcmd",getRootElement(),cvehcmd)-- у тебя ивент, но судя по названию ты хотел команду.  addCommandHandler функция, смотри вики 

Ага спасибо но мне тут нужно что-бы сработала команда из дургого ресурса ( как пример ресурс который при вводе команды /cveh открывает настройки автомобиля) так вот как вызвать комманду?

Эм... тебе нужно открытие по команде ? Ну так addCommandHandler ! Если из другого ресурса - експорт функции и call . Не понимаю зачем это, но раз нужно...

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...