Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 12/01/17 in all areas

  1. طيب ليه الالمنت داتا دامك راح تحفظها بالسكل خليها سكل مره وحده وخلاص + الفنكشنات "onResourceStart" "onPlayerJoin" "onPlayerChangeNick" getPlayerSerial getPlayerName executeSQLQuery طبعا تقول ليه السريال عشان لاغير الاعب اسمه او دخل السيرفر تجيب سرياله وتحقق انه ماهب موجود بالقاعدة وتحط اسم واذا كان موجود له اسم تحقق انه مايساوي الاسم الي دخل فيه وسويله ابديت
    2 points
  2. اها اعذرني ما انتبهت
    1 point
  3. ضيف الكود هذا addEventHandler ("onResourceStart", resourceRoot , function ( ) local aPlayers = getElementsByType ( "player" ) if ( #aPlayers ~= 0 ) then for _ , v in ipairs ( aPlayers ) do local aPlayersSerial = getPlayerSerial( v ) local Select_ = executeSQLQuery ( 'SELECT * FROM `TABLE` WHERE serial=?', aPlayersSerial ) if ( type ( Select_ ) == 'TABLE' and #Select_ == 0 or not Select_ ) then return end setElementData( v , dataName , Select_ [ 1 ][ 'point' ] ) end end end ) ; addEventHandler ("onResourceStop", resourceRoot , function ( ) local aPlayers = getElementsByType ( "player" ) if ( #aPlayers ~= 0 ) then for _ , v in ipairs ( aPlayers ) do local aPlayersSerial = getPlayerSerial( v ) local aData = getElementData ( source , dataName ) if ( aData and aData ~= false ) then local Select_ = executeSQLQuery ( 'SELECT * FROM `TABLE` WHERE serial=?', aPlayersSerial ) if ( type ( Select_ ) == 'TABLE' and #Select_ == 0 or not Select_ ) then executeSQLQuery ('INSERT INTO `TABLE` (serial,point) VALUES (?,?)', aPlayersSerial, aData) else executeSQLQuery ('UPDATE `TABLE` SET serial = ? , point = ?', aPlayersSerial , aData ) end end end end end ) ; مدري اذا كان فيه اخطاء , لاني كاتبه على السريع بالتوفيق
    1 point
  4. Alright, I managed to figure it out for you. I also included the OOP version. So, I found out attachElements doesn't have the custom order parameter which allows you to set the order of the rotation. The expected rotation order would be ZYX, in OOP this is not the case however. I am not entirely sure why this is, it might be because of some simple rule but I just don't realize it right now... maybe it's written somewhere in the depths of the Wiki, but I cba to find it right now. I changed some of the parameters for the addVehicleCustomWheel function to allow tilt and scale upon call. I also added a command /customwheels so you can try it out by typing /customwheels [tilt] [scale] Anyway, have fun, either one works, whichever you like the best. I also cleaned up and commented the code just because people might be interested in this, so it's better if this is cleaned up for future reference. For you specifically, the fix would be to look into the calculateVehicleWheelRotation function, which shows how I've attached the custom wheel to the vehicle. Those contents should replace your attachElements, because attachElements doesn't work, you have to attach manually with position and rotation... Client-side -- Table containing vehicles that have custom wheels local createdCustomWheels = { } --[[ /customwheels [ number tilt, number scale ] Adds custom wheels to your currently occupied vehicle and optionally applies a tilt angle and wheel scale. ]] addCommandHandler( 'customwheels', function( _, tilt, scale ) -- Let's get our vehicle local vehicle = getPedOccupiedVehicle( localPlayer ) -- Oh, we have a vehicle! if ( vehicle ) then -- Let's give it a wheel now addVehicleCustomWheel( vehicle, 1075, tilt, scale ) end end ) -- Let's bind that command to F2 as requested by OP bindKey( 'f2', 'down', 'customwheels' ) --[[ void addVehicleCustomWheel ( vehicle vehicle, number model [ , number tilt, number scale ] ) Adds custom wheels to the vehicle. ]] function addVehicleCustomWheel( vehicle, model, tilt, scale ) -- If we've given the object's model number if ( tonumber( model ) ) then -- Let's delete any old ones for _, wheel in pairs( createdCustomWheels[ vehicle ] or { } ) do destroyElement( wheel.object ) end -- And let's nil it to be clear createdCustomWheels[ vehicle ] = nil -- Let's set some component names we want to customize local wheels = { 'wheel_lf_dummy', 'wheel_rf_dummy' } -- Let's iterate through those components for i = 1, #wheels do -- Let's hide the existing component setVehicleComponentVisible( vehicle, wheels[ i ], false ) -- Initialize our wheel table local wheel = { tilt = tonumber( tilt ) or 0, -- We'll default a non-number tilt angle to 0 name = wheels[ i ], -- Let's store the component name object = createObject( model, Vector3( ) ) -- Let's make a new wheel object } -- Let's set the vehicle as the wheel object's parent setElementParent( wheel.object, vehicle ) -- Let's make sure the wheel is not colliding with the vehicle setElementCollidableWith( wheel.object, vehicle, false ) -- Let's change the scale setObjectScale( wheel.object, tonumber( scale ) or 0.7 ) -- Let's update that original table wheels[ i ] = wheel end -- And let's store all of those wheels now createdCustomWheels[ vehicle ] = wheels end end --[[ void calculateVehicleWheelRotation ( vehicle vehicle, table wheel ) Let's calculate the wheel rotation for given wheel(s). ]] function calculateVehicleWheelRotation( vehicle, wheel ) -- If we have many wheels in the given argument if ( type( wheel ) == 'table' ) and ( #wheel > 0 ) then -- Let's iterate through them all for i = 1, #wheel do -- Let's call the method alone with just the iterator calculateVehicleWheelRotation( vehicle, wheel[ i ] ) end -- Let's stop here now return end -- If we have an object if ( wheel.object ) then -- Let's get the rotation vector of the original component local rotation = Vector3( getVehicleComponentRotation( vehicle, wheel.name, 'world' ) ) -- Let's set our tilt angle rotation.y = wheel.tilt -- Let's make sure the wheel is at the original component's position setElementPosition( wheel.object, Vector3( getVehicleComponentPosition( vehicle, wheel.name, 'world' ) ) ) -- Let's finally set the rotation (in ZYX order, important!) setElementRotation( wheel.object, rotation, "ZYX" ) end end -- Render-time! addEventHandler( 'onClientPreRender', root, function( ) -- Let's iterate through all the vehicles for vehicle, wheels in pairs( createdCustomWheels ) do -- If we have a vehicle, it's streamed in and it has wheels if ( vehicle ) and ( isElementStreamedIn( vehicle ) ) and ( #wheels > 0 ) then -- Let's calculate wheel rotation! calculateVehicleWheelRotation( vehicle, wheels ) end end end ) Client-side (OOP) -- Table containing vehicles that have custom wheels local createdCustomWheels = { } --[[ /customwheels [ number tilt, number scale ] Adds custom wheels to your currently occupied vehicle and optionally applies a tilt angle and wheel scale. ]] addCommandHandler( 'customwheels', function( _, tilt, scale ) -- Let's get our vehicle local vehicle = localPlayer:getOccupiedVehicle( ) -- Oh, we have a vehicle! if ( vehicle ) then -- Let's give it a wheel now vehicle:addCustomWheel( 1075, tilt, scale ) end end ) -- Let's bind that command to F2 as requested by OP bindKey( 'f2', 'down', 'customwheels' ) --[[ void Vehicle:addCustomWheel ( number model [ , number tilt, number scale ] ) Adds custom wheels to the vehicle. ]] function Vehicle:addCustomWheel( model, tilt, scale ) -- If we've given the object's model number if ( tonumber( model ) ) then -- Let's delete any old ones for _, wheel in pairs( createdCustomWheels[ self ] or { } ) do wheel.object:destroy( ) end -- And let's nil it to be clear createdCustomWheels[ self ] = nil -- Let's set some component names we want to customize local wheels = { 'wheel_lf_dummy', 'wheel_rf_dummy' } -- Let's iterate through those components for i = 1, #wheels do -- Let's hide the existing component self:setComponentVisible( wheels[ i ], false ) -- Initialize our wheel table local wheel = { tilt = tonumber( tilt ) or 0, -- We'll default a non-number tilt angle to 0 name = wheels[ i ], -- Let's store the component name object = Object( model, Vector3( ) ) -- Let's make a new wheel object } -- Let's set the vehicle as the wheel object's parent wheel.object:setParent( self ) -- Let's make sure the wheel is not colliding with the vehicle wheel.object:setCollidableWith( self, false ) -- Let's change the scale wheel.object:setScale( tonumber( scale ) or 0.7 ) -- Let's update that original table wheels[ i ] = wheel end -- And let's store all of those wheels now createdCustomWheels[ self ] = wheels end end --[[ void Vehicle:calculateWheelRotation ( table wheel ) Let's calculate the wheel rotation for given wheel(s). ]] function Vehicle:calculateWheelRotation( wheel ) -- If we have many wheels in the given argument if ( type( wheel ) == 'table' ) and ( #wheel > 0 ) then -- Let's iterate through them all for i = 1, #wheel do -- Let's call the method alone with just the iterator self:calculateWheelRotation( wheel[ i ] ) end -- Let's stop here now return end -- If we have an object if ( wheel.object ) then -- Let's get the rotation vector of the original component local rotation = Vector3( self:getComponentRotation( wheel.name, 'world' ) ) -- Let's set our tilt angle rotation.y = wheel.tilt -- Let's make sure the wheel is at the original component's position wheel.object:setPosition( self:getComponentPosition( wheel.name, 'world' ) ) -- Let's finally set the rotation wheel.object:setRotation( rotation ) end end -- Render-time! addEventHandler( 'onClientPreRender', root, function( ) -- Let's iterate through all the vehicles for vehicle, wheels in pairs( createdCustomWheels ) do -- If we have a vehicle, it's streamed in and it has wheels if ( vehicle ) and ( vehicle:isStreamedIn( ) ) and ( #wheels > 0 ) then -- Let's calculate wheel rotation! vehicle:calculateWheelRotation( wheels ) end end end )
    1 point
  5. طب كذا لو اللاعب نقص منه نجمة راح تتشال الصورة تلقائي ؟
    1 point
  6. بعد ال elseif ( level > 6 ) then guiSetVisible(startimage1, true) مثل كذا ؟؟
    1 point
  7. طب و استخدم شو عشان اظهر الصورة اول لما يخذ 1 wanted يظهر لك صورة واحدة من النجوم و هكذا و ايمكن انك تعطيني مثال
    1 point
  8. اطفيها ب استخدام showPlayerHudComponent("wanted",true) ??
    1 point
  9. local dataName = "" -- إسم الداتا حق النقاط addEventHandler ( "onResourceStart", resourceRoot, function () executeSQLQuery ('CREATE TABLE IF NOT EXISTS `TABLE` ( serial,point ) ') end ) addEventHandler("onPlayerQuit ", root, function () local playerSerail = getPlayerSerial( source ) local Save = executeSQLQuery ('SELECT * FROM `TABLE` WHERE serial=?',playerSerail ) local data = getElementData (source, dataName) if ( data and data ~= "" ) then if (type ( Save ) == 'TABLE' and #Save == 0 or not Save ) then executeSQLQuery ('INSERT INTO `TABLE` (serial,point) VALUES (?,?)', playerSerail, data) else executeSQLQuery ('UPDATE `TABLE` SET serial = ? , point = ?', playerSerail , data) end end end ) addEventHandler ("onPlayerJoin", root, function () local playerSerail = getPlayerSerial(source) local Save = executeSQLQuery ( 'SELECT * FROM `TABLE` WHERE serial=?',playerSerail ) if (type ( Save ) == 'TABLE' and #Save == 0 or not Save ) then return end local saveData = Save[1]['point'] setElementData(source,dataName,saveData) end )
    1 point
  10. Приветствую всех! Давно меня не было на форуме (немного пропал интерес к gtasa), и решил заглянуть да посмотреть ситуацию. Не буду ходить вокруг да около, сразу перейду к сути. Обратил внимание на некоторые сомнительные темы с вакансиями, содержание которых было ещё сомнительней. Да я и до этого их видел и равнодушно проходил мимо, но что изменилось сейчас? - Да собственно наверное и ничего, или наверное, надежда помочь людям составлять вакансии более грамотно. Я понимаю, что это форум и всё такое, тут нет чёткого шаблона или требований о составлении вакансии, но тем не менее если вы не школьник (хотя бы в душе) и хотите показаться грамотным человеком с серьёзными намерениями (а не тем за кого обычно всех принимают), то как минимум подумайте о грамотном оформлении и требований вашей вакансии. К примеру вот эта тема: https://forum.multitheftauto.com/topic/91891-вакансия-в-мта-проект/ или эта https://forum.multitheftauto.com/topic/92218-ищу-скриптеров/ или эта https://forum.multitheftauto.com/topic/91284-вакансия-lua-кодер/ или эта https://forum.multitheftauto.com/topic/91205-вакансии-нпо-проект-greis/ Называйте тему сразу нужной вакансией. Например: Программист Lua или Дизайнер UI. Не надо добавлять префикс [Вакансия], вставьте его в теги (Tags). Не пишите несколько вакансий в одну тему. Разделяйте в разные темы и расписывайте подробно требования, знания, чем нужно будет заниматься, что будет плюсом в знаниях, з/п (либо укажите, что по собеседованию) ну и конечно же контактные данные (скайп, почта, вк и т.д.). Если вы сами не знаете кто вам требуется и какими навыками он должен обладать, то поверьте, лучше вообще бросьте это дело. Мало быть хорошим руководителем, нужно быть осведомлённым во всех вопросах которые будут вас касаться в MTA, нужно быть продвинутым в области в которой вы работаете. Если у вас всего этого нет - у вас ничего не выйдет. Прежде чем писать кучу требований (языки, технологии и т.д.) подумайте как вы будете проводить собеседование и проверять эти навыки у кандидата. Не прокатит какое-то тестовое задание - потому что скорее всего вы его найдёте в интернете и когда кандидат его решит вы ничего не поймёте из этого. Другое дело если вы более менее разбираетесь в этих навыках (которые требуете) то должны из общения понять, стоит ли с человеком иметь дело. Так же забудьте про "скриптеров" и "кодеров" (разве что вам реально нужен говнокодер) - нет такой должности/работы. Скрипты пишут сис.админы на bash`е (или другой ваш любимый язык) для автоматизации на сервере (это пример). ПО состоит из программного когда и его пишет разработчик (программист). Не ищите уникального специалиста который будет сразу делать всё и сразу (писать гейммод и админить ваш сервер - это две разные должности, и платить нужно соответственно). Возможно вы подумаете, что я перегибаю палку, ведь мы не на рынке труда и никого по ТК РФ даже не устраиваем, к чему все эти заморочки? - Да, на трудоустройство мы не берем, да и у реального работодателя всё куда серьёзнее: есть HR, есть руководители с которыми проводятся собеседования, которые проверяют знания кандидатов и тому подобное. В МТА конечно же всё по другому, этот рынок на много ниже уровнем, но это не мешает вам поднимать свой личный, да и вовсе не значит, что нужно казаться необразованным держателем сервера коих полно в этом мире. Посмотрите примеры вакансий на hh.ru и вы (надеюсь) поймёте о чём я говорю. Ещё один момент - это награда (з/п) которую вы обещаете. За 10к в месяц ни один уважающий себя специалист не будет работать по 8 часов 7 дней в неделю. Логично, что такой человек (реально хороший специалист) будет работать на обычной работе получая обычную зарплату. Я понимаю, что рынок здесь не развит, но я хочу чтобы вы понимали чего должны и не должны требовать от работника. Это больше подходит на подработку в свободное время. Ну и так же понимайте, что хороший специалист никогда не будет искать тут работу и тем более не откликнется на такие сомнительные предложения о которых я писал выше. Конечно вы можете поискать старожилов на форуме, в ВК и т.д., но зачастую такие люди кинут вас в ЧС (как правило попадают те люди которые не умеют правильно и грамотно подать своё предложение, пишут что-то вроде "привет го рп делать в мта я буду платить!!!!" - конечно ЧС). Если же вы грамотного составите своё предложение, то человек хотя бы им заинтересуется. Но на самом деле, большего успеха вы добьётесь найдя человека на сайтах с фрилансом ну или быть может на HH, но если вы хотите человека к себе на постоянной основе, за высокую плату, то подумайте о договоре который так же можно составить виртуально (главное уметь правильно это делать - гугл в помощь). На этом пожалуй всё. Надеюсь мои замечания и рекомендации как-то вам помогут.
    1 point
  11. جرب ذا local dataName = "" -- إسم الداتا حق النقاط addEventHandler ( "onResourceStart", resourceRoot, function () executeSQLQuery ('CREATE TABLE IF NOT EXISTS `TABLE` ( serial,point ) ') end ) addEventHandler("onPlayerQuit ", root, function () local playerSerail = getPlayerSerial( source ) local Save = executeSQLQuery ('SELECT * FROM `TABLE` WHERE serial=?',playerSerail ) local data = getElementData (source, dataName) if ( data and data ~= "" ) then if (type ( Save ) == 'TABLE' and #Save == 0 or not Save ) then executeSQLQuery ('INSERT INTO `TABLE` (serial,point) VALUES (?,?)' playerSerail, data) else executeSQLQuery ('UPDATE `TABLE` SET serial = ? , point = ?' playerSerail , data) end end end ) addEventHandler ("onPlayerJoin", root, function () local playerSerail = getPlayerSerial(source) local Save = executeSQLQuery ( 'SELECT * FROM `TABLE` WHERE serial=?',playerSerail ) if (type ( Save ) == 'TABLE' and #Save == 0 or not Save ) then return end local saveData = Save[1]['point'] setElementData(source,dataName,saveData) end )
    1 point
  12. شباب ابغى احد يعلمني كيف استخدم callRemote وكيف اشغلها . الرجل مافهم من الويكي وقال يبي حد يشرحله انا ساعدته عطيته مثال من الويكي وشرحته له وانشالله الشباب مايقصرون ويعطوه امثله
    1 point
  13. هو يبي تعلمه وش فايدة الوضيفة ويبغى مثال عليها
    1 point
  14. You need to lock the Y component relative to the X component with an offset of -15 or whatever tilt looks good for you. I'll get you an example once I get to test it out.
    1 point
  15. Busca el archivo 'admin_server.lua' y en la línea 508 reemplaza la función 'aAction' por esta: function aAction ( type, action, admin, player, data, more ) if ( aLogMessages[type] ) then function aStripString ( string ) string = tostring ( string ) string = string.gsub ( string, "$admin", getPlayerName ( admin ) ) string = string.gsub ( string, "$by_admin_4all", isAnonAdmin4All( admin ) and "" or " by " .. getPlayerName ( admin ) ) string = string.gsub ( string, "$by_admin_4plr", isAnonAdmin4Victim( admin ) and "" or " by " .. getPlayerName ( admin ) ) string = string.gsub ( string, "$data2", more or "" ) if ( player ) then string = string.gsub ( string, "$player", getPlayerName ( player ) ) end return tostring ( string.gsub ( string, "$data", data or "" ) ) end local node = aLogMessages[type][action] if ( node ) then local r, g, b = node["r"], node["g"], node["b"] if ( node["all"] ) then outputChatBox ( aStripString ( node["all"] ), _root, r, g, b , true) end if ( node["admin"] ) and ( admin ~= player ) then outputChatBox ( aStripString ( node["admin"] ), admin, r, g, b, true) end if ( node["player"] ) then outputChatBox ( aStripString ( node["player"] ), player, r, g, b, true) end if ( node["log"] ) then outputServerLog ( aStripString ( node["log"] ) ) end end end end
    1 point
  16. Busca los outputChatBox, quizás te saldría así outputChatBox("Pepito has been muted by Carlitos", root, 255, 0, 0) Y sólo añade un 'true' para que detecte los códigos HEX outputChatBox("#000000Pepito #FFFFFFhas been muted by Carlitos", root, 255, 0, 0 ,true)
    1 point
  17. You need to lock either Y or X, forgot which. One of them has lean that makes all hell breaks loose when applied.
    1 point
  18. @Master_MTA ماراح تضبط الطريقة نهائيا , زيا ماقلت فوق الاسماء ممكن تتكرر , + التيبلات لو طفى السيرفر واشتغل راح تروح واضافة على ذلك ماراح يقدر يجيب الاعب الي خرج من السيرفر ماله الي قلت له عليه فوق
    1 point
  19. That happens because there is no veh[ source ] set for the player. I was able to make it work once I defined veh[ source ] with a vehicle, as an example. Here's a cleaned up version: Mk1 = createMarker( -33.35546875, -279.1201171875, 5.625 - 1, "cylinder", 1.1, 255, 255, 0, 255 ) Mk2 = createMarker( -92.0009765625, -307.244140625, 1.4296875 - 1, "cylinder", 7.5, 255, 0, 0 ) Mk3 = createMarker( 1070.2001953125, 1889.2646484375, 10.8203125 - 1, "cylinder", 7.5, 255, 0, 0 ) Mk4 = createMarker( -40.4404296875, -225.564453125, 5.4296875 - 1, "cylinder", 7.5, 255, 0, 0 ) B1 = createBlipAttachedTo( Mk2, 0 ) B2 = createBlipAttachedTo( Mk3, 41 ) B3 = createBlipAttachedTo( Mk4, 19 ) setElementVisibleTo( B1, root, false ) setElementVisibleTo( B2, root, false ) setElementVisibleTo( B3, root, false ) setElementVisibleTo( Mk2, root, false ) setElementVisibleTo( Mk3, root, false ) setElementVisibleTo( Mk4, root, false ) veh = { } function incio( source ) if ( isElementWithinMarker( source, Mk1 ) ) then if ( isElement( veh[ source ] ) ) then destroyElement( veh[ source ] ) end x, y, z = getElementPosition( source ) Trabalho = true setElementVisibleTo( B1, source, true ) setElementVisibleTo( Mk2, source, true ) outputChatBox( "#00ff00Vá carregar o furgão.", source, 0, 0, 0, true ) end end addEventHandler( "onMarkerHit", Mk1, incio ) function carrega( source ) if ( isElementWithinMarker( source, Mk2 ) ) then outputChatBox( "#00ff00Leve a carga do furgão até o local marcado no mapa para descarregar.", source, 0, 0, 0, true ) setElementVisibleTo( B1, source, false ) setElementVisibleTo( Mk2, source, false ) setElementVisibleTo( Mk3, source, true ) setElementVisibleTo( B2, source, true ) end end addEventHandler( "onMarkerHit", Mk2 ,carrega ) function retorna( source ) if ( isElementWithinMarker( source, Mk3 ) ) then outputChatBox( "Agora retorne a empresa com o furgão para receber seu pagamento.", source, 0, 0, 0, true ) setElementVisibleTo( Mk3, source, false ) setElementVisibleTo( B2, source, false ) setElementVisibleTo( Mk4, source, true ) setElementVisibleTo( B3, source, true ) end end addEventHandler( "onMarkerHit", Mk3, retorna ) function fim( source ) -- Never gets triggered, because the player has no vehicle... if ( isElement( veh[ source ] ) ) then destroyElement( veh[ source ] ) givePlayerMoney( source, 1000 ) setElementVisibleTo( B3, source, false ) setElementVisibleTo( B4, source, false ) -- There is no B4 blip in the script? This throws an error. end end addEventHandler( "onMarkerHit", Mk4, fim ) function sair( source ) if ( isElement( veh[ source ] ) ) then setElementVisibleTo( B1, source, false ) destroyElement( veh[ source ] ) outputChatBox( "#00ff00Você saiu do veiculo,desobedeceu as ordems do chefe e foi demitido.", source, 0, 0, 0, true ) end end addEventHandler( "onVehicleExit", root, sair )
    1 point
  20. No problem , if you need help you can send me a PM :3 Good Luck
    1 point
  21. لغة لوا بالنسبهه عند العرب معدوم دعمها شروحات قليله جدا ومافي كورس محدد يشرح لك تفاصيل اللغه , وهي تعتبر لغه سهله جدا مقارنه باللغات الثانيه وكل لغات البرمجه قريبه من بعض لكن تختلف باشياء بسيطه بنهاية الوضيفه end كمثال الجافا سكربت ما تكتب كود الوضيفه يكون بين قوسين اذا منت فاهم شي من كلامي شي عادي كمل وبس <@> واهم شي حاول تفهم وتدرب على الكلمات اللي تواجهك بالبرمجه بالانقلش اما اذا كانت لغتك بالانقلش كويسه .اسحب على الكلام الي تحت وابدا ابحث بالانقلش مثل ما قالك كلنويا مدري كنلوليل ---------- اما اذا لغتك ماش حالها وجايب العيد كمل هنا اول شي تعلم الأساسيات وهي المتغيرات وانواع التايب واللي منها سترنق , نمبر , اوبجكت , بولين ,وفيه اشياء ثانيه وايش الفرق بينهم وتبدا بامثله بسيطه لين تبدا تعرف كيف اللغه تشتغل وكيف تتعامل معها بعدين تبدا تتعمق بالجداول وكيف تسوي لوب وو هالامور حاليا يمكن منت فاهم منها ولا اي شي لكن كويس انك تاخذ خلفيه سريعه ومع الشروحات الي بتشوفها تبدا تتذكر وتفهم الزبده وماطول عليك انصحك تتفرج كورس جافا سكربت , لان العرب كثير يدعموا هاللغه ومليان شروحات وامثله , طبعا خذ منها الاساسيات وارجع ابحث عن شروحات لـ لغة لوا وبتحصلها بسيطه وسهله جدا عليك , وطبعا جافا سكربت ما رح تفهمك لوا ميه بالميه .لكن هي تقريبا قريبه وبتخليك تقدر تفهم لوا بشكل افضل وتساعدك وتبدا انت تمسك خط وتطور من نفسك
    1 point
  22. http://zserge.wordpress.com/2012/02/23/lua-за-60-минут/ - на русском, все хорошо и понятно рассписано
    1 point
×
×
  • Create New...