DakiLLa Posted January 5, 2014 Share Posted January 5, 2014 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 ) Link to comment
Bzz335 Posted January 5, 2014 Share Posted January 5, 2014 Спасибо! А что такое "s_skin"?? Не работает,кстати. Link to comment
DakiLLa Posted January 5, 2014 Share Posted January 5, 2014 Функция setElementData позволяет присвоить элементу данные, используя уникальный ключ (почитайте на вики). В данном случае я назвал его "s_skin". Можете назвать ключ как хотите. Link to comment
Bzz335 Posted January 5, 2014 Share Posted January 5, 2014 Другой вопрос,почему не работает? Дебаг молчит! Link to comment
DakiLLa Posted January 5, 2014 Share Posted January 5, 2014 Попробуйте вот так: 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 ) Link to comment
Bzz335 Posted January 5, 2014 Share Posted January 5, 2014 Работает.Спасибо,сейчас буду рассматривать этот "код" и понимать. А что означает "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 скина,только где он задан выше? Link to comment
DakiLLa Posted January 5, 2014 Share Posted January 5, 2014 Вызываем функцию applySavedSkin внутри setTimer, передавая при этом два параметра: элемент игрока и его сохраненный скин. Функция applySavedSkin принимает два параметра, я их обозвал player и skin. Вам бы основы Lua почитать, что ли, или программирования как такового, даже не знаю (передача параметров в функции, вызов функции и тому подобное). Link to comment
Bzz335 Posted January 5, 2014 Share Posted January 5, 2014 (edited) 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 January 5, 2014 by Guest Link to comment
KruTolic_rus Posted January 5, 2014 Share Posted January 5, 2014 Хорошо,почитаю. 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) Link to comment
Bzz335 Posted January 5, 2014 Share Posted January 5, 2014 Я обновил код. Бесконечно повторяется для того,чтобы чувак стоял в маркере и получал деньги. ... Спасибо. Немножко переделал код. 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) Link to comment
KruTolic_rus Posted January 5, 2014 Share Posted January 5, 2014 и не будут. 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? Link to comment
nikitafloy Posted January 6, 2014 Share Posted January 6, 2014 Полагаю, что при окончании таймера выпускаются из тюрьмы все. Как это локализовать для каждого игрока? Думал с таблицами. Добавляем игрока: {таймер, игрок }, {таймер, игрок}, ... Но как это извлечь и т.д. мало опыта. Какие предложения? Хотя бы подсказку, если лениво расписывать. 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 ) Link to comment
TheNormalnij Posted January 6, 2014 Share Posted January 6, 2014 -- 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 ) Link to comment
TheNormalnij Posted January 6, 2014 Share Posted January 6, 2014 nikitafloy, кратко по таблицам. local badMans = {} -- создали таблицу badMans[player] = time -- добавили туда игрока local time = badMans[player] -- получили время игрока badMans[player] = nil -- удалили игрока for player, time in pairs( badMans ) do -- работаем со всеми в цикле end Link to comment
nikitafloy Posted January 6, 2014 Share Posted January 6, 2014 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 ) Link to comment
TwiX! Posted January 6, 2014 Share Posted January 6, 2014 debug: attempt to concatenate 'CPc' ( nil value ) local CPc = cols[CP] local Link to comment
nikitafloy Posted January 7, 2014 Share Posted January 7, 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
MeowCola Posted January 8, 2014 Share Posted January 8, 2014 Подкиньте, пожалуйста, несколько скриптов, с которых можно или даже стоит взять пример. Буду очень благодарен Вам за это Link to comment
AMARANT Posted January 8, 2014 Share Posted January 8, 2014 Подкиньте, пожалуйста, несколько скриптов, с которых можно или даже стоит взять пример. Буду очень благодарен Вам за это Взять пример чего? Link to comment
MeowCola Posted January 8, 2014 Share Posted January 8, 2014 Подкиньте, пожалуйста, несколько скриптов, с которых можно или даже стоит взять пример. Буду очень благодарен Вам за это Взять пример чего? Оформления кода, стиля программирования. Link to comment
Bzz335 Posted January 8, 2014 Share Posted January 8, 2014 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) Проверка на команды не работает,открывает на всех. Link to comment
AMARANT Posted January 8, 2014 Share Posted January 8, 2014 Так конечно, что это за проверка такая. Ты просто проверяешь наличие такой команды как "S.W.A.T.". Ты же не проверяешь принадлежность к этой команде игрока который вошел в маркер. Link to comment
Bzz335 Posted January 8, 2014 Share Posted January 8, 2014 Спс. 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) ... Link to comment
AMARANT Posted January 8, 2014 Share Posted January 8, 2014 Ты пытаешься определить команду маркера, а не игрока. А маркеры не могут быть в какой-то команде. Почитай внимательно что представляет собой 'source' в функции onMarkerHit. Link to comment
Bzz335 Posted January 8, 2014 Share Posted January 8, 2014 И какой тогда обработчик брать??? HitElement??? 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