Jump to content

طلب تصحيح كود , getRandomPlayer()


Mr.Mostafa

Recommended Posts

سلام عليكم

ابي تصحيح كود

ابي الكود يجيب لاعبين اتنين عشوائين من السيرفر , بس ما يطلع نفس بعض الاتنين , الاتنين مختلفين يعني

ويكونو معهم داتا محددة

* كود احمد بس معدل عليه لكن مب ظابط *

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 by Mr.Mostafa
Link to comment
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
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 by iMr.WiFi..!
تعديل بسيط
Link to comment
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
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

وكنت تقدر تختصرها اكثر من كذا

  • Like 1
Link to comment

 

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
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 by #,xiRocKyz
توضيح
  • Like 1
Link to comment
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

وايضاً لاحظت ان راعي الموضوع لمح انه تمت افادته مايحتاج نطول النقاش اكثر من كذا : )

  • Like 1
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...