MX_Master

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

Recommended Posts

function onDeath() 
  -- запоминаем, какой скин был у игрока 
  local currSkin = getElementModel( source ) 
  setElementData( source, "s_skin", currSkin, false ) 
end 
  
function onSpawn() 
  -- выдаем сохраненный скин игроку (если таковой имелся до того) 
  local savedSkin = getElementData( source, "s_skin" ) 
  if not savedSkin then 
    savedSkin = getElementModel( source ) 
  end 
  setElementModel( source, savedSkin ) 
end 
  
addEventHandler( "onPlayerWasted", root, onDeath ) 
addEventHandler( "onPlayerSpawn", root, onSpawn ) 

Share this post


Link to post

Спасибо!

А что такое "s_skin"??

Не работает,кстати.

Share this post


Link to post

Функция setElementData позволяет присвоить элементу данные, используя уникальный ключ (почитайте на вики). В данном случае я назвал его "s_skin". Можете назвать ключ как хотите.

Share this post


Link to post

Другой вопрос,почему не работает?

Дебаг молчит!

Share this post


Link to post

Попробуйте вот так:

function onDeath() 
  -- запоминаем, какой скин был у игрока 
  local currSkin = getElementModel( source ) 
  setElementData( source, "s_skin", currSkin, false ) 
end 
  
function onSpawn() 
  -- выдаем сохраненный скин игроку (если таковой имелся до того) 
  local savedSkin = getElementData( source, "s_skin" ) 
  if not savedSkin then 
    savedSkin = getElementModel( source ) 
  end 
   
  -- небольшая задержка сразу после спавна не повредит 
  setTimer( applySavedSkin, 75, 1, source, savedSkin ) 
end 
  
function applySavedSkin( player, skin ) 
  if isElement( player ) then 
    setElementModel( player, skin ) 
  end 
end 
  
addEventHandler( "onPlayerWasted", root, onDeath ) 
addEventHandler( "onPlayerSpawn", root, onSpawn ) 

Share this post


Link to post

Работает.Спасибо,сейчас буду рассматривать этот "код" и понимать.

А что означает "skin"

  
function onSpawn() 
  -- выдаем сохраненный скин игроку (если таковой имелся до того) 
  local savedSkin = getElementData( source, "s_skin" ) 
  if not savedSkin then 
    savedSkin = getElementModel( source ) 
  end 
  
  -- небольшая задержка сразу после спавна не повредит 
  setTimer( applySavedSkin, 75, 1, source, savedSkin ) -- "savedSkin" - доп.аргумент.Но что такое "skin"???Откуда он взялся... 
end 
setElementModel( player, skin ) -- Как Я понял - это ID скина,только где он задан выше? 
  

Share this post


Link to post

Вызываем функцию applySavedSkin внутри setTimer, передавая при этом два параметра: элемент игрока и его сохраненный скин. Функция applySavedSkin принимает два параметра, я их обозвал player и skin. Вам бы основы Lua почитать, что ли, или программирования как такового, даже не знаю (передача параметров в функции, вызов функции и тому подобное).

Share this post


Link to post

Client:

  
local MoneyMarker =createMarker (2491, -1664, 12.5, "cylinder", 4, 255, 155, 144, 170 ) 
  
function Check (hitElement) 
if ( localPlayer == hitElement ) then 
What = setTimer ( GetMoney, 1000, 0 ) 
end 
end 
function GetMoney(hitElement) 
if isElementWithinMarker(localPlayer, MoneyMarker) then 
  triggerServerEvent ( "GetMoneyS", localPlayer)  
end 
end 
addEventHandler( "onClientMarkerHit", MoneyMarker, Check ) 
  

Server:

  
function GetMoneyS(thePlayer) 
givePlayerMoney(thePlayer,1) 
end 
addEventHandler ( "GetMoneyS", getRootElement(), GetMoneyS ) 
addEvent ( "onSpecialEvent", true ) 
  

Деньги не даются..

Edited by Guest

Share this post


Link to post
Хорошо,почитаю.
  
local MoneyMarker = createMarker(2490,-1665,12.5, "cylinder", 5, 255, 177, 133,177) 
  
function Check(thePlayer) 
if isElementWithinMarker(thePlayer, MoneyMarker) then 
outputChatBox("WTF1") 
timer = setTimer ( getMoney, 1000, 0) 
end 
end 
addEventHandler("onMarkerHit",MoneyMarker,Check) 
  
function getMoney(thePlayer) 
  
if isElementWithinMarker(source, MoneyMarker) then 
givePlayerMoney(source,1) 
else 
killTimer(timer) 
end 
  

Какой ставить аргумент здесь?

В setPlayerMoney и "isElement..."

...

"@Bad Argument"

_____

Нужна проверка,находится ли человек в маркере,если да,то дать ему 1$,если нет,уничтожить таймер.

Не могу понять зачем вы так закручиваете простой скрипт? Не проще ли сделать так:

local MoneyMarker = createMarker(2490,-1665,12.5, "cylinder", 5, 255, 177, 133,177) 
  
function Check(thePlayer) 
     if isElementWithinMarker(thePlayer, MoneyMarker) then 
          outputChatBox("WTF1",getRootElement()) 
          timer = setTimer ( function() givePlayerMoney(thePlayer,1) end 
          , 1000, 1) ----/// 3 сет в вашем таймере был "0".То есть,этот скрипт повторяется вечно.Зачем? 
     end 
end 
addEventHandler("onMarkerHit",MoneyMarker,Check) 
  

Share this post


Link to post

Я обновил код.

Бесконечно повторяется для того,чтобы чувак стоял в маркере и получал деньги.

...

Спасибо.

Немножко переделал код.

  
local MoneyMarker = createMarker(2490,-1665,12.5, "cylinder", 5, 255, 177, 133,177) 
  
function Check(thePlayer) 
     if isElementWithinMarker(thePlayer, MoneyMarker) then 
          timer = setTimer ( function() givePlayerMoney(thePlayer,1) end 
          , 1000, 0)  
     end 
end 
addEventHandler("onMarkerHit",MoneyMarker,Check) 
  
function Stop(thePlayer) 
killTimer(timer) 
end 
addEventHandler("onMarkerLeave",MoneyMarker,Stop) 

Share this post


Link to post

и не будут.

addEventHandler ( "GetMoneyS", getRootElement(), GetMoneyS ) 
addEvent ( "onSpecialEvent", true )  

,а надо:

addEvent ( "GetMoneyS", true ) 
addEventHandler ( "GetMoneyS", getRootElement(), GetMoneyS )  

triggerServerEvent ( "GetMoneyS", localPlayer,hitElement)  

if ( localPlayer == hitElement ) then ---/// к чему эта проверка? МБ просто if hitElement then?  

Share this post


Link to post

Полагаю, что при окончании таймера выпускаются из тюрьмы все. Как это локализовать для каждого игрока? Думал с таблицами.

Добавляем игрока:

{таймер, игрок }, {таймер, игрок}, ...

Но как это извлечь и т.д. мало опыта.

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

function cmd ( 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 ) 
                                    setTimer ( function() 
                                        local account = getPlayerAccount ( Psource ) 
                                        local lodskin = getAccountData ( account, 'oldskin' ) 
                                        local ofgt = getAccountData ( account, 'oldfgt' ) 
                                        spawnPlayer ( Psource, 2290.19995, 2430.5, 10.8, 180, tostring (lodskin), 0, 0 ) 
                                        setPedFightingStyle ( Psource, tostring (ofgt) ) 
                                        setCameraTarget ( Psource ) 
                                    end, toTime*60000, 1) 
                                    elseif ( getVehicleOccupant ( occup, 3 ) ) then 
                                    local account = getPlayerAccount ( Psource ) 
                                    local oldskin = setAccountData ( account, 'oldskin', getElementModel ( Psource ) ) 
                                    local oldfgt = setAccountData ( account, 'oldfgt', 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 ) 
                                    setTimer ( function() 
                                        local account = getPlayerAccount ( Psource ) 
                                        local lodskin = getAccountData ( account, 'oldskin' ) 
                                        local ofgt = getAccountData ( account, 'oldfgt' ) 
                                        spawnPlayer ( Psource, 2290.19995, 2430.5, 10.8, 180, tostring (lodskin), 0, 0 ) 
                                        setPedFightingStyle ( Psource, tostring (ofgt) ) 
                                        setCameraTarget ( Psource ) 
                                    end, toTime*60000, 1) -- Данный таймер. 
                                    end 
                        end 
                end 
            end 
            end 
        end 
        end 
    end 
end 
addCommandHandler ( 'anyCmd', cmd ) 

Share this post


Link to post
 -- Client 
local moneyMarker = createMarker (2491, -1664, 12.5, "cylinder", 4, 255, 155, 144, 170 ) 
  
addEventHandler( "onClientMarkerHit", moneyMarker, function( hitPlayer, dim ) 
  if localPlayer == hitPlayer and dim then 
    setTimer( triggerServerEvent, 1000, 1, 'onPlayerGiveMoney', localPlayer, 1500 ) 
  end 
end ) 
  

 -- Server 
addEvent( 'onPlayerGiveMoney', true ) 
addEventHandler( 'onPlayerGiveMoney', root, function( money ) 
  givePlayerMoney (source, money ) 
end ) 
  

Share this post


Link to post

nikitafloy, кратко по таблицам.

  
local badMans = {} -- создали таблицу 
  
badMans[player] = time -- добавили туда игрока 
local time = badMans[player] -- получили время игрока 
badMans[player] = nil  -- удалили игрока 
  
for player, time in pairs( badMans ) do 
  -- работаем со всеми в цикле 
end 
  

Share this post


Link to post
nikitafloy, кратко по таблицам.
  
local badMans = {} -- создали таблицу 
  
badMans[player] = time -- добавили туда игрока 
local time = badMans[player] -- получили время игрока 
badMans[player] = nil  -- удалили игрока 
  
for player, time in pairs( badMans ) do 
  -- работаем со всеми в цикле 
end 
  

Применяю для извлечения колшейпов:

local cols = {} 
  
function freezP( attacker, weapon, bodypart, loss ) 
... 
            local x, y, z = getElementPosition ( source ) 
            CP = createColSphere(x, y, z, 4) 
            cols[CP] = CPc 
... 
end 
addEventHandler ( "onPlayerDamage", root, freezP ) 
  
function inCar ( thePlayer, cmd, Psource ) 
... 
        local CPc = cols[CP] 
        if ( isElementWithinColShape ( thePlayer, CPc ) ) then 
... 
        end 
end 
addCommandHandler ( 'tPr', inCar ) 

debug: attempt to concatenate 'CPc' ( nil value )

Share this post


Link to post
debug: attempt to concatenate 'CPc' ( nil value )
local CPc = cols[CP] 

local :/

Share this post


Link to post
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 ) 
  

Что будет в сл. циклах я боюсь представить. :cry:

Share this post


Link to post

Подкиньте, пожалуйста, несколько скриптов, с которых можно или даже стоит взять пример. Буду очень благодарен Вам за это :)

Share this post


Link to post
Подкиньте, пожалуйста, несколько скриптов, с которых можно или даже стоит взять пример. Буду очень благодарен Вам за это :)

Взять пример чего?

Share this post


Link to post
Подкиньте, пожалуйста, несколько скриптов, с которых можно или даже стоит взять пример. Буду очень благодарен Вам за это :)

Взять пример чего?

Оформления кода, стиля программирования.

Share this post


Link to post

Server:

  
local team =createTeam("Criminals",255,0,0) 
function main() 
local playerTeam = getPlayerTeam ( source )           
    if not ( playerTeam ) then     
setPlayerTeam(source,team) 
end 
end 
addEventHandler("onPlayerLogin",root,main) 
  

_____________

  
function moveGate( hitPlayer, matchingDimension,playerSource) 
local swat = getTeamFromName ( "S.W.A.T" ) 
 if (swat) then 
        moveObject(gate, 2000, 272, 2509.7, 9.5) 
        setTimer(moveBack, 2500, 1) 
else 
outputChatBox("ss") 
    end 
end 
addEventHandler("onMarkerHit", markerforgate, moveGate) 
  
  

Проверка на команды не работает,открывает на всех.

Share this post


Link to post

Так конечно, что это за проверка такая. Ты просто проверяешь наличие такой команды как "S.W.A.T.". Ты же не проверяешь принадлежность к этой команде игрока который вошел в маркер.

Share this post


Link to post

Спс.

  
function moveGate( hitPlayer, matchingDimension,playerSource) 
local swat = getTeamFromName ( "S.W.A.T" ) 
local playerTeam = getPlayerTeam ( source )  
local ss = getTeamName ( playerTeam )   
 if ss == swat then 
        moveObject(gate, 2000, 272, 2509.7, 9.5) 
        setTimer(moveBack, 2500, 1) 
else 
outputDebugString("ss") 
    end 
end 
addEventHandler("onMarkerHit", markerforgate, moveGate) 
  

@Bad Player Point(getPlayerTeam)

@Bad Argument(GetTeamName)

...

Share this post


Link to post

Ты пытаешься определить команду маркера, а не игрока. А маркеры не могут быть в какой-то команде. Почитай внимательно что представляет собой 'source' в функции onMarkerHit.

Share this post


Link to post

И какой тогда обработчик брать???

HitElement???

Share this post


Link to post

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.