Jump to content

Вопросы и ответы по MTA.


Recommended Posts

у меня 2 вопроса

1 почему не работает этот код

function onChat(player,msgc,t) 
    
  if t == 0 then 
  local px,py,pz=getElementPosition(player) 
  local msg = table.concat(msgc, " ") 
  local nick=getPlayerName(player) 
local r,g,b =255,255,255 
  for _,v in ipairs(getElementsByType("player")) do 
    if isPlayerInRangeOfPoint(v,px,py,pz,chat_range) then 
      outputChatBox(""..nick..": "..msg,v,r,g,b,true) 
    end 
  end 
  end 
  if t ==2 then 
     
  local r,g,b= getTeamColor(getPlayerTeam(player)) 
local msg = table.concat(msgc, " ") 
  local nick=getPlayerName(player) 
rank=getElementData(player,"frang") 
      outputChatBox(rank .."  "..nick..": "..msg,getPlayerTeam(player),r,g,b,true) 
  end 
 cancelEvent () 
end 
addCommandHandler("Local",onChat) 
 addEventHandler( "onPlayerChat", getRootElement(), onChat ) 
  

2вопрос

как сделать камеру сделать как в кат сценах обрезанная по верхним краям? :D

Link to comment
у меня 2 вопроса

1 почему не работает этот код

function onChat(player,msgc,t) 
    
  if t == 0 then 
  local px,py,pz=getElementPosition(player) 
  local msg = table.concat(msgc, " ") 
  local nick=getPlayerName(player) 
local r,g,b =255,255,255 
  for _,v in ipairs(getElementsByType("player")) do 
    if isPlayerInRangeOfPoint(v,px,py,pz,chat_range) then 
      outputChatBox(""..nick..": "..msg,v,r,g,b,true) 
    end 
  end 
  end 
  if t ==2 then 
     
  local r,g,b= getTeamColor(getPlayerTeam(player)) 
local msg = table.concat(msgc, " ") 
  local nick=getPlayerName(player) 
rank=getElementData(player,"frang") 
      outputChatBox(rank .."  "..nick..": "..msg,getPlayerTeam(player),r,g,b,true) 
  end 
 cancelEvent () 
end 
addCommandHandler("Local",onChat) 
 addEventHandler( "onPlayerChat", getRootElement(), onChat ) 
  

2вопрос

как сделать камеру сделать как в кат сценах обрезанная по верхним краям? :D

Ты делаешь обработчик onPlayerChat к функции onChat это не будет работать т.к аргументы в функции неверные создай 2 функции одну для обработчика команды другую для обработчика события.

как сделать камеру сделать как в кат сценах обрезанная по верхним краям? :D

Самому :D юзай https://wiki.multitheftauto.com/wiki/RU/ ... 0.B8.D1.8F

p.s Запомни глобальную переменную root навсегда.root это тоже самое что и getRootElement( )

Код:

addCommandHandler("Local",  
    function( source,cmd,msgc,Type ) 
        if not Type or Type == 0 then 
            local px,py,pz = getElementPosition( source ) 
            local msg = table.concat( msgc, " " ) 
            local nick = getPlayerName( source ) 
            local r,g,b = 255,255,255 
            for _,v in ipairs( getElementsByType("player") ) do 
                if isPlayerInRangeOfPoint( v,px,py,pz,chat_range ) then 
                    outputChatBox(nick..": "..msg,v,r,g,b,true) 
                end 
            end 
        elseif Type == 2 then 
            local playerTeam = getPlayerTeam( source ) 
            if playerTeam then 
                local r,g,b = getTeamColor( playerTeam ) 
                local msg = table.concat( msgc, " " ) 
                local nick = getPlayerName( source ) 
                local rank = getElementData( source,"frang" ) 
                outputChatBox(rank .."  "..nick..": "..msg,playerTeam,r,g,b,true)   
            end  
        end 
    end 
) 
     
addEventHandler( "onPlayerChat", root,  
    function( msgc,Type ) 
        cancelEvent( ) 
        if Type == 0 then 
            local px,py,pz = getElementPosition( source ) 
            local msg = table.concat( msgc, " " ) 
            local nick = getPlayerName( source ) 
            local r,g,b = 255,255,255 
            for _,v in ipairs( getElementsByType("player") ) do 
                if isPlayerInRangeOfPoint( v,px,py,pz,chat_range ) then 
                    outputChatBox(nick..": "..msg,v,r,g,b,true) 
                end 
            end 
        elseif Type == 2 then 
            local playerTeam = getPlayerTeam( source ) 
            if playerTeam then 
                local r,g,b = getTeamColor( playerTeam ) 
                local msg = table.concat( msgc, " " ) 
                local nick = getPlayerName( source ) 
                local rank = getElementData( source,"frang" ) 
                outputChatBox(rank .."  "..nick..": "..msg,playerTeam,r,g,b,true)   
            end  
        end 
    end 
) 

Link to comment

Помогите пожалуйста написать скрипт, скрипт для Race мода, суть в том, если написать /gravitys то машины всех игроков зависнуть в воздухе, как будто гравитацию сменили на 0.000, примерно на 2-3 секунды, а потом их машины резко полетят вниз, как будто гравитацию сменили на 0.2 (если писать /gravitys это будет действовать на всех игроков, а если /gravitys name то на выбранного игрока) Помогите кто сможет...

Link to comment

сервер

addCommandHandler("gravitys",    function( source,cmd,name )        if type( name ) == "string" then            local from = getPlayerFromName( name )            if from then                setPedGravity( from,0 )                setTimer( setPedGravity,2000,1,from,0.2 )             end        else            setPedGravity( root,0 )            setTimer( setPedGravity,2000,1,root,0.2 )         end    end)    

Link to comment
сервер
addCommandHandler("gravitys", 
    function( source,cmd,name ) 
        if type( name ) == "string" then 
            local from = getPlayerFromName( name ) 
            if from then 
                setPedGravity( from,0 ) 
                setTimer( setPedGravity,2000,1,from,0.2 )  
            end 
        else 
            setPedGravity( root,0 ) 
            setTimer( setPedGravity,2000,1,root,0.2 )  
        end 
    end 
)    
  

А можно сдеать вот так?

1. Если написать /gravitys то у всех игроков будет меняться гравитация, сначала сделается 0.1 через 1 секунду 0.000, и опять через секунду станет нормальной(0.008) И что бы вышло сообщение в чат "Ник_кто написал_/gravirtys изменил гравитацию всем игрокам!"?

2. Если написать /gravitys playe_name изменится гравитация именно у этого игрока. И сообщение в чат "Ник_кто написал /gravitys player_name изменил гравитацию Player_name?

Link to comment
killer100, сам не доделаешь? хоть что-то нужно же дописать самому

Masha_Digel, я думаю, ресурс Map Editor не установлен

MX_Master, я пытался, но что то добром не получается, помоги пожалуйста...

Я не могу сделать: изменение гравитации сначала 0.1 через секунду 0.000 и опять через секунду 0.008

И если написать /gravitys изменится гравитация у всех игроков, а сообщения в чат могу сам сделать...

Link to comment
Если не мучаться самому, то ничему не научишься (: делай, показывай и тогда поможем

В общем вот что у меня получилось:

function setgravity ( player, cmd, name ) 
    player = findPlayer(name) 
       if isPedInVehicle( player ) then 
          setPedGravity( player,0.1 ) 
           setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
        outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
 end 
 end 
addCommandHandler( "sgravity", setgravity ) 

1. Этот скрипт только для /sgravity name(а мне ещё и нужно что бы он срабатывал на всех игроках, если написать просто /sgravity)

2. Он притягиевает к земле(0.1), потом меняет гра-ию на 0.000, но не меняет на 0.008(а мне нужно сначала 0.1 потом 0.000 потом 0.008)

Link to comment
Если не мучаться самому, то ничему не научишься (: делай, показывай и тогда поможем

В общем вот что у меня получилось:

function setgravity ( player, cmd, name ) 
    player = findPlayer(name) 
       if isPedInVehicle( player ) then 
          setPedGravity( player,0.1 ) 
           setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
        outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
 end 
 end 
addCommandHandler( "sgravity", setgravity ) 

1. Этот скрипт только для /sgravity name(а мне ещё и нужно что бы он срабатывал на всех игроках, если написать просто /sgravity)

2. Он притягиевает к земле(0.1), потом меняет гра-ию на 0.000, но не меняет на 0.008(а мне нужно сначала 0.1 потом 0.000 потом 0.008)

function setgravity ( player, cmd, name ) 
  
    -- ДЛЯ ВСЕХ 
    if not name or name == '' then 
        local players = getElementsByType('player') 
        if not players then return end 
         
        for _, player in ipairs(players) do 
            if isPedInVehicle( player ) then 
                setPedGravity( player,0.1 ) 
                setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
                outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
            end 
        end 
         
        return 
    end 
     
  
    -- ТОЛЬКО ДЛЯ ОДНОГО ИГРОКА 
    local player = findPlayer(name) 
    if not player then return end 
  
    if isPedInVehicle( player ) then 
        setPedGravity( player,0.1 ) 
        setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
        outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
    end 
  
end 
  
addCommandHandler( "sgravity", setgravity ) 

это я по твоему же примеру сделал

Link to comment

Всем привет. Я хочу научится скриптингу в мта. Раньше писал в пешке и думаю что тут не очень много отличий.

В общем сервер создал, выбрал готовый мод. Теперь хочется его настроить под себя.

1. Каким образом в мта работает система регистрации/авторизации и где ее найти?

2. В какой файл идут зарегистрированые пользователи?

Link to comment

Ну так как я тоже суда пришел относительно недавно, отвечу, так как сам через это проходил.

Отличий от Pawn много. От SAMP'а еще больше. В подробности углу:Oть не буду, долго объяснять. Можете почитать мои сообщения и мою тему с моими вопросиками.

Система регистрации авторизации в MTA встроенная, найти ее функции можно здесь.

Аккаунты созданные стандартной системой регистрации, если не ошибаюсь, идут в

..\MTA San Andreas 1.1\server\mods\deathmatch\internal.db 

Это файл SQLite. Открыть и отредактировать можно, например, SQLite Browser'ом. Желательны знания языка запросов SQL.

Link to comment
Как создать глобальную переменную? Мне для использования этой переменной из одного скрипта, в другом. Такое реально в мта?)

всё, что не "local" — то глобально в пределах ресурса (с разделением на клиентскую и серверную часть, само собой).

глобальнее нельзя, ибо каждый ресурс работает в своей VM.

Link to comment

Блин я по ходу долго буду вникать во все это :shock:

Хочу сделать сохранение уровней и убийства игроков, а как это сделать не понимаю.

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

     setAccountData ( playeraccount, "s.HandMoney", getPlayerMoney ( source ) ) 

     local playermoney = getAccountData ( playeraccount, "s.HandMoney" ) 
     if ( playermoney ) then 
           setPlayerMoney ( source, playermoney ) 
     end 

Как добавлять уровень и убийства я не понял, что нужно вместо getPlayerMoney и setPlayerMoney ставить?

Link to comment
Блин я по ходу долго буду вникать во все это :shock:

Хочу сделать сохранение уровней и убийства игроков, а как это сделать не понимаю.

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

     setAccountData ( playeraccount, "s.HandMoney", getPlayerMoney ( source ) ) 

     local playermoney = getAccountData ( playeraccount, "s.HandMoney" ) 
     if ( playermoney ) then 
           setPlayerMoney ( source, playermoney ) 
     end 

Как добавлять уровень и убийства я не понял, что нужно вместо getPlayerMoney и setPlayerMoney ставить?

У меня создается впечатление, что вы ничего не знаете ни в Pawn, ни в SAMP (откуда, как говорите пришли).

Вы в Pawn как делали (если делали)? Создавали переменную

new Kills[MAXPLAYERS]; 
new Deaths[MAXPLAYERS]; 
  
public onPlayerDeath(playerid, killerid, reason) // и прибавляли в паблике убийства и смерти 
{ 
Kills[killerid]++; 
Deaths[playerid]++; 
return 1; 
} 

Тут так же. Только можно setElementData / getElementData использовать (аналог PVar'ов).

Насчет сохранения:

  
setAccountData(thePlayer, "Kills", переменная содержащая количество убийств) 
setAccountData(thePlayer, "Deaths", аналогично) 
--[[example 
local kills = getElementData(thePlayer, "Kills") 
local deaths = getElementData(thePlayer, "Deaths") 
setAccountData(thePlayer, "Kills", kills) 
setAccountData(thePlayer, "Deaths", deaths 
  
  

Это честно говоря, базовые знания, они должны быть у вас уже, если вы работали в Pawn и соответственно в SAMP (я про переменные и как сделать счетчики убийств / смертей).

И конечно же, не стоит забывать про Wiki.MtaSa.Com

Link to comment

_Dark_, не надо на меня давить и давай на чистоту. Я самоучка в павно. В самп писал скрипты и переделывал моды на "любителя", в паблике моих работ нет т.к. пишу для себя. В павно я многое понимаю, но не знаю как и что называется, от чего мне приходится гуглить чуть ли не каждое "заумное" слово про скриптинг из ваших ответов. Да и задавать каждый вопрос по сравнению к пешке по моему не красиво, т.к. тут совсем другое. Так что извиняйте что приходится иногда тупить :roll: спасибо с уровнем, разобрался все работает

Link to comment
_Dark_, не надо на меня давить и давай на чистоту. Я самоучка в павно. В самп писал скрипты и переделывал моды на "любителя", в паблике моих работ нет т.к. пишу для себя. В павно я многое понимаю, но не знаю как и что называется, от чего мне приходится гуглить чуть ли не каждое "заумное" слово про скриптинг из ваших ответов. Да и задавать каждый вопрос по сравнению к пешке по моему не красиво, т.к. тут совсем другое. Так что извиняйте что приходится иногда тупить :roll: спасибо с уровнем, разобрался все работает

Давайте на чистоту. Я самоучка в Pawn, сам всему научился, сам проводил время на wiki, pawno.ru и других проектах. В SAMP писал скрипты чисто для себя. Мод создавал только для своего сервера (онлайн 100/100). В паблике моих работ нет. В Pawno я очень много знаю, кроме того, в данный момент веду разработку своей системы мониторинга игровых серверов на PHP (коммерческий проект), пишу мод для MTA и веду активное изучение LUA. Знаю все и что как называется, ничего не гуглю, это все уже прошел. Ну и думаю, что вы задали некорректный вопрос. Вы спрашивали или как сохранять смерти или убийства во встроенной системе аккаунтов или как вообще это сделать. Так что, не надо делать поспешные выводы с давлением, лучше бы официальную Wiki почитали, там много чего полезного. Правда.

Link to comment
Если не мучаться самому, то ничему не научишься (: делай, показывай и тогда поможем

В общем вот что у меня получилось:

function setgravity ( player, cmd, name ) 
    player = findPlayer(name) 
       if isPedInVehicle( player ) then 
          setPedGravity( player,0.1 ) 
           setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
        outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
 end 
 end 
addCommandHandler( "sgravity", setgravity ) 

1. Этот скрипт только для /sgravity name(а мне ещё и нужно что бы он срабатывал на всех игроках, если написать просто /sgravity)

2. Он притягиевает к земле(0.1), потом меняет гра-ию на 0.000, но не меняет на 0.008(а мне нужно сначала 0.1 потом 0.000 потом 0.008)

function setgravity ( player, cmd, name ) 
  
    -- ДЛЯ ВСЕХ 
    if not name or name == '' then 
        local players = getElementsByType('player') 
        if not players then return end 
         
        for _, player in ipairs(players) do 
            if isPedInVehicle( player ) then 
                setPedGravity( player,0.1 ) 
                setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
                outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
            end 
        end 
         
        return 
    end 
     
  
    -- ТОЛЬКО ДЛЯ ОДНОГО ИГРОКА 
    local player = findPlayer(name) 
    if not player then return end 
  
    if isPedInVehicle( player ) then 
        setPedGravity( player,0.1 ) 
        setTimer( setPedGravity,1000,1,player,0.000,1000,1,0.008 ) 
        outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
    end 
  
end 
  
addCommandHandler( "sgravity", setgravity ) 

это я по твоему же примеру сделал

Скрипт не возвращяет игрока в нормальную гравитацию(0.008), а всё остальное работает замечательно.

Как это сделать? Я вообще не представляю не когда этого не делал...

Link to comment

_Dark_, pawn это язык программирования (: и редактор в одном лице. Просто детям так проще. pawno и pawn для них это одно и тоже, просто во втором слове одной буквы в конце не хватает, и думают, что это опечатка того, кто это написал :lol:

killer100

function setgravity ( player, cmd, name ) 
  
    -- ДЛЯ ВСЕХ 
    if not name or name == '' then 
        local players = getElementsByType('player') 
        if not players then return end 
         
        for _, player in ipairs(players) do 
            if isPedInVehicle( player ) then 
                setPedGravity( player,0.1 ) 
                setTimer( setPedGravity,1000,1,player,0.008 ) 
                outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
            end 
        end 
         
        return 
    end 
     
  
    -- ТОЛЬКО ДЛЯ ОДНОГО ИГРОКА 
    local player = findPlayer(name) 
    if not player then return end 
  
    if isPedInVehicle( player ) then 
        setPedGravity( player,0.1 ) 
        setTimer( setPedGravity,1000,1,player,0.008 ) 
        outputChatBox(getPlayerName(player).." #fff000set gravitation to "..getPlayerName(player).."!",getRootElement(),255,255,0, true)  
    end 
  
end 
  
addCommandHandler( "sgravity", setgravity ) 

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...