Mr.Mostafa Posted September 21, 2018 Share Posted September 21, 2018 (edited) سلام عليكم ابي تصحيح كود ابي الكود يجيب لاعبين اتنين عشوائين من السيرفر , بس ما يطلع نفس بعض الاتنين , الاتنين مختلفين يعني ويكونو معهم داتا محددة * كود احمد بس معدل عليه لكن مب ظابط * function getTwoRandom() local players = {} for _,player in ipairs(getElementsByType("player")) do table["insert"](players, player) end if #players > 2 then return players[math.random(#players)] end return false end Edited September 21, 2018 by Mr.Mostafa Link to comment
iMr.WiFi..! Posted September 21, 2018 Share Posted September 21, 2018 function getTwoRandom() local player1, player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))],nil; repeat player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] until player2 ~= player1 return player1, player2; end Link to comment
Mr.Mostafa Posted September 21, 2018 Author Share Posted September 21, 2018 2 minutes ago, iMr.WiFi..! said: function getTwoRandom() local player1, player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))],nil; repeat player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] until player2 ~= player1 return player1, player2; end تسلم + لو ابي اجيبهم بالشات كدا؟ local ra = getTwoRandom() outputChatBox(""..ra.."",root,255,0,0,true) Link to comment
iMr.WiFi..! Posted September 21, 2018 Share Posted September 21, 2018 Just now, Mr.Mostafa said: تسلم + لو ابي اجيبهم بالشات كدا؟ local ra = getTwoRandom() outputChatBox(""..ra.."",root,255,0,0,true) local p1, p2 = getTwoRandom() outputChatBox("Player 1 : "..p1..", Player 2: ".. p2,root,255,0,0,true) Link to comment
Mr.Mostafa Posted September 21, 2018 Author Share Posted September 21, 2018 + ابيهم يكونو معهم داتا محددة Link to comment
iMr.WiFi..! Posted September 21, 2018 Share Posted September 21, 2018 (edited) function getTwoRandom(Data, Key) local player1, player2 = nil,nil; repeat player1 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] until getElementData( player1, Data ) == Key and getElementData( player2, Data ) == Key and player2 ~= player1 return player1, player2; end Edited September 21, 2018 by iMr.WiFi..! تعديل بسيط Link to comment
Mr.Mostafa Posted September 21, 2018 Author Share Posted September 21, 2018 22 minutes ago, iMr.WiFi..! said: function getTwoRandom(Data, Key) local player1, player2 = nil,nil; repeat player1 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] until getElementData( player1, Data ) == Key and getElementData( player2, Data ) == Key and player2 ~= player1 return player1, player2; end تسلم جاري التجربة . Link to comment
Master_MTA Posted September 21, 2018 Share Posted September 21, 2018 3 hours ago, iMr.WiFi..! said: p1 getPlayerName +_+ Link to comment
iMr.WiFi..! Posted September 21, 2018 Share Posted September 21, 2018 Just now, Master_MTA said: getPlayerName +_+ نسيت /: local p1, p2 = getTwoRandom() outputChatBox("Player 1 : "..getPlayerName(p1)..", Player 2: ".. getPlayerName(p2),root,255,0,0,true) 1 Link to comment
Mr.Mostafa Posted September 21, 2018 Author Share Posted September 21, 2018 51 minutes ago, iMr.WiFi..! said: نسيت /: local p1, p2 = getTwoRandom() outputChatBox("Player 1 : "..getPlayerName(p1)..", Player 2: ".. getPlayerName(p2),root,255,0,0,true) كدا كدا كنت ابي اشوف الفكرة بس , تسلم Link to comment
Rockyz Posted September 21, 2018 Share Posted September 21, 2018 4 hours ago, iMr.WiFi..! said: function getTwoRandom(Data, Key) local player1, player2 = nil,nil; repeat player1 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))] until getElementData( player1, Data ) == Key and getElementData( player2, Data ) == Key and player2 ~= player1 return player1, player2; end وظيفتك ناقصنها تحققات لنفترض ان عندنا لاعب واحد في السيرفر وظيفتك بتسبب infinite loop وكنت تقدر تختصرها اكثر من كذا 1 Link to comment
iMr.WiFi..! Posted September 21, 2018 Share Posted September 21, 2018 9 minutes ago, #,xiRocKyz said: وظيفتك ناقصنها تحققات لنفترض ان عندنا لاعب واحد في السيرفر وظيفتك بتسبب infinite loop وكنت تقدر تختصرها اكثر من كذا تشكر على الملاحظات, شكلي بديت انسى كثير function getTwoRandom(Data) local player1, player2 = nil,nil; if( #getElementsByType('player') == 0 ) return end repeat player1, player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))], getElementsByType('player')[math.random(1,#getElementsByType('player'))] until getElementData( player1, Data ) and getElementData( player2, Data ) and player2 ~= player1 return player1, player2; end 52 minutes ago, Mr.Mostafa said: كدا كدا كنت ابي اشوف الفكرة بس , تسلم الله يسلمك بالتوفيق لك Link to comment
Rockyz Posted September 21, 2018 Share Posted September 21, 2018 (edited) 5 hours ago, iMr.WiFi..! said: تشكر على الملاحظات, شكلي بديت انسى كثير function getTwoRandom(Data) local player1, player2 = nil,nil; if( #getElementsByType('player') == 0 ) return end repeat player1, player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))], getElementsByType('player')[math.random(1,#getElementsByType('player'))] until getElementData( player1, Data ) and getElementData( player2, Data ) and player2 ~= player1 return player1, player2; end الله يسلمك بالتوفيق لك للحين وظيفتك غلط وتسبب infinite loop لنفترض ان هناك فقط لاعب واحد في السيرفر انت كذا عرفت اللاعب في المتغيرين player1 و player2 وأنت تتحقق اذا كانوا مختلفين وهم نفس اللاعب ف بيسبب لوب لانهائي سويت وظيفة افضل للي يبي يستفيد: function getRandomElementsFromData(elementType, dataKey, dataValue, maxElements) if type(elementType) == 'string' and type(dataKey) == 'string' then local elements = getElementsByType(elementType) local maxElements = type(maxElements) == 'number' and math.max(maxElements, 1) or 1; local dataElements, randomElements = {}, {}; local currentIndex = 1; for index = 1, #elements do if getElementData(elements[index], dataKey) == dataValue then dataElements[string.char(math.random(97, 122))..index] = elements[index]; end end for index, value in pairs(dataElements) do randomElements[currentIndex] = value; if currentIndex >= maxElements then break end currentIndex = currentIndex +1 end return randomElements end return false end مثال: addEventHandler('onResourceStart', resourceRoot, function() local numbers = {'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'}; for index = 1, #numbers do setElementData(createElement('randomElement', numbers[index]), 'randomData', true) end end) addCommandHandler('getRandomNumbers', function(player, cmd) local results = getRandomElementsFromData('randomElement', 'randomData', true, 3) for index = 1, #results do outputChatBox(getElementID(results[index]), player) end end) المثال هذا اذا كتبت الكوماند getRandomNumbers راح يجيب لك 3 ارقام عشوائية (من الواحد للعشرة) وطبعا تقدر تستخدم الفنكشن للاعبين Edited September 21, 2018 by #,xiRocKyz توضيح 1 Link to comment
iMr.WiFi..! Posted September 21, 2018 Share Posted September 21, 2018 1 hour ago, #,xiRocKyz said: للحين وظيفتك غلط وتسبب infinite loop لنفترض ان هناك فقط لاعب واحد في السيرفر انت كذا عرفت اللاعب في المتغيرين player1 و player2 وأنت تتحقق اذا كانوا مختلفين وهم نفس اللاعب ف بيسبب لوب لانهائي سويت وظيفة افضل للي يبي يستفيد: function getRandomElementsFromData(elementType, dataKey, dataValue, maxElements) if type(elementType) == 'string' and type(dataKey) == 'string' then local elements = getElementsByType(elementType) local maxElements = type(maxElements) == 'number' and math.max(maxElements, 1) or 1; local dataElements, randomElements = {}, {}; local currentIndex = 1; for index = 1, #elements do if getElementData(elements[index], dataKey) == dataValue then dataElements[string.char(math.random(97, 122))..index] = elements[index]; end end for index, value in pairs(dataElements) do randomElements[currentIndex] = value; if currentIndex >= maxElements then break end currentIndex = currentIndex +1 end return randomElements end return false end مثال: addEventHandler('onResourceStart', resourceRoot, function() local numbers = {'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten'}; for index = 1, #numbers do setElementData(createElement('randomElement', numbers[index]), 'randomData', true) end end) addCommandHandler('getRandomNumbers', function(player, cmd) local results = getRandomElementsFromData('randomElement', 'randomData', true, 3) for index = 1, #results do outputChatBox(getElementID(results[index]), player) end end) المثال هذا اذا كتبت الكوماند getRandomNumbers راح يجيب لك 3 ارقام عشوائية (من الواحد للعشرة) وطبعا تقدر تستخدم الفنكشن للاعبين ماقصرت, هذي تستاهل تحطها في الوظائف المفيدة .. بس كان اكتفيت بالكود حقي وعدلت سطر واحد لاغير وانحل الموضوع . function getTwoRandom(Data) local player1, player2 = nil,nil; if( #getElementsByType('player') >= 2 ) then repeat player1, player2 = getElementsByType('player')[math.random(1,#getElementsByType('player'))], getElementsByType('player')[math.random(1,#getElementsByType('player'))] until getElementData( player1, Data ) and getElementData( player2, Data ) and player2 ~= player1 return player1, player2; end end وايضاً لاحظت ان راعي الموضوع لمح انه تمت افادته مايحتاج نطول النقاش اكثر من كذا : ) 1 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