Jump to content

Grid List Problem | مشكلة بتحديد اللاعبين .


Recommended Posts

السلام عليكم ورحمة الله وبركاته

الموضوع معقد شوية لو على اللى انا ابيه لكن بحاول ابسطه

حاليا فى لوحة فيها زر وجريد لست فيه اللاعبين المتواجدين بالسيرفر

حابب لما انا احدد لاعب واضغط على الزر توصله رسالة

لحد هنا سهل ^

لكن لو اللاعب وافق على الرسالة يتحقق منه اموالى واموال اللاعب يعنى يتحقق من اموال المرسل والمرسل اليه

لحد هنا برضو سهل ^

حابب لما اللاعب يوافق على الطلب يعنى النافذة اللى بتظهر له اللى هى النافذة الثانية ( الجديدة ) فيها زرين واحد يقبل والتانى يرفض

لو قبل اللاعب ينقلنى انا واللاعب منطقة ثانية

setElementPosition

المشكلة فى الموضوع انا حابب احدد الشخص اللى ارسل رسالة اللى هو انا

اللاعب اللى انا ارسلته الرسالة اقدر احدده من خلال

guiGridListGetItemText

طيب بالنسبة لى انا اللى ارسلت الرسالة

كيف احدد نفسى

ملحوظة عشان لاحد يفهم غلط : - لما اللاعب يقبل يكون اللاعب اللى فى الجريد لست هو ال localPlayer

يعنى انا لما ارسل رسالة انا اكون اللوكل بلاير وهو لما يقبل الرسالة هو يكون اللوكل بلاير .. فما ينفع استخدم لوكل بلاير بعد قبول اللاعب الدعوة او الرسالة

اتمنى تكون الفكرة وصلت واللى مافهم ياريت يستفسر بالتعليقات ..

يمكن الفكرة سهلة لكن الموضوع معقد اكتر من كدا بكثير ... فى المود اللى انا اصنعه حاليا ( لو الموضوع تافه اعتذر لانى تركت اللعبة حوالى سنتين ونسيت أشياء تافهة كثير رغم اهميتها )

لو فى حد مفهمش الفكرة اسهله واسهلى ^_^

ياريت يسويلى كود فيه جريد لست فيه اللاعبين وفيه زر يرسل رسالة للاعب المحدد

ولما اللاعب يقبل الدعوة ينقلنى انا واللاعب ذا لمكان يعنى لاحداثيات انا احددها ..

طبعا الموضوع معقد اكتر لكن انا بحاول اظبطها من خلال الكود مع اللى عندى .

Link to comment

طيب حاول تسوي ان لما ينضغط الزر تجيب اسم اللاعب

وترسله مع الكود الي يروح للاعب الثاني

مثال

addEventHandler("onClientGUIClick",root, 
  function () 
      if ( source == Botton ) then 
        getPlayerName ( localPlayer ) 
     end 
  end 
) 

او انك تحط ايديت بوكس

وتلزم اللاعب يكتب اسم

من ثم تجيب اسم اللاعب من خلال

guiGetText

Link to comment

حط داتا علي الاعب اللي وصلت له الدعوة ..

setElementData(getPlayerFromName("InvitedPlayer"), "InvitedBy", You) 

ويوم يقبل هات الداتا دي و بكدة تكون جبت الاعب اللي ارسل

Link to comment

Mr.Cor الفكرة ماوصلتك

DABL فكرتك ماتنفع ... خطرت ببالى وبإفتراض فكرتك بعد لما اعمل الداتا ازاى اجيب اللاعب من داتا

getPlayerFromData -_- .... فكرت اعمل وظيفة بنفس الاسم لكن حصلت فيها كمية جلتشات رهيبة

وفافرتاض ان فكرتك ظبطت وعرفت اجيب اللاعب من الداتا وده مينفعش اصلا .. DABL

بافتراض ان فى 2 لاعبيين بعتو دعوة ل 2 مختلفين

لو حطيت داتا الاتنين اللى بعتو هتتحط عليهم الداتا فلو حبيت انقل اللاعب اللى أرسل واللاعب اللى جتله الرسالة

هينقل اللى جتله الرسالة واحتمال ينقل معاه واحد تانى من ال 2 اللى ارسلو عشان الداتا عليهم هما الاتنين فمش هيفرق مبينهم .. انا عملت الفكرة دى بس مش بداتا عملتها بتحديد مكان بالجريد ليست لكن لما يكون فى دعوتين يحصل الجلتش ..

-------------------------------------------------

وبالمناسبة برا الموضوع ...

DABL افتح بتلاقى دعوة إقبلها بالسكايب ..

--------------------------------------------------

لم تتم الإفادة بعد ..

Link to comment

انت تقصد انك بتحدد لاعب من الجريد ثم ترسل له رساله وتطلع له نافذه ويرفض او يقبل واذا قبل ينقلك وينقله لمكان محدد؟ طيب هو فعلاً تقدر تستخدم الداتا بطريقه سهله! او تقدر تستخدم الجداول تضيف اللاعب بالجدول ثم تجيب اللاعب، واذا كان فكرتك بتسويها سيرفر انصحك بالجداول عشان ما تجي لخبطه بالكلينت سوي داتا؟

Link to comment

[quote name=™!>VàLéNTiNô

DABL فكرتك ماتنفع ... خطرت ببالى وبإفتراض فكرتك بعد لما اعمل الداتا ازاى اجيب اللاعب من داتا

getPlayerFromData -_- .... فكرت اعمل وظيفة بنفس الاسم لكن حصلت فيها كمية جلتشات رهيبة

وفافرتاض ان فكرتك ظبطت وعرفت اجيب اللاعب من الداتا وده مينفعش اصلا .. DABL

بافتراض ان فى 2 لاعبيين بعتو دعوة ل 2 مختلفين

لو حطيت داتا الاتنين اللى بعتو هتتحط عليهم الداتا فلو حبيت انقل اللاعب اللى أرسل واللاعب اللى جتله الرسالة

هينقل اللى جتله الرسالة واحتمال ينقل معاه واحد تانى من ال 2 اللى ارسلو عشان الداتا عليهم هما الاتنين فمش هيفرق مبينهم .. انا عملت الفكرة دى بس مش بداتا عملتها بتحديد مكان بالجريد ليست لكن لما يكون فى دعوتين يحصل الجلتش ..

-------------------------------------------------

وبالمناسبة برا الموضوع ...

DABL افتح بتلاقى دعوة إقبلها بالسكايب ..[/size]

--------------------------------------------------

لم تتم الإفادة بعد ..

ترا الفكرة تضبط ومطبقها في احد المودات اللي فيها منافسة

: 3 وضابطة

كل ما عليك تسويه شوية تحققات وبيطلع تمام

وليه ما تقدر تجيب الاعب من الداتا؟ -.-

تقدر تحفظ الاعب نفسه وتقدر تحفظ اسمه و تجيبه بوظيفة

getPlayerFromName

------

بلنسبة لسكايب ما وصلني شيء

: dabl_24

Link to comment
[quote name=™!>VàLéNTiNô
getPlayerFromData moch mawjoda, inta ta3ni getElementData ?

انا اقول انى سويت وظيفة بهذا الاسم وحصل فيها جلتشات .

تقصد بقات ؟ ورينا كودك طيب

بحاول اسلها لك .. واسويلك لوحة مبسطة عشان اللوحة عندى معوقة حبتين ..

addEventHandler("onClientResourceStart", resourceRoot,

function ()

screenW, screenH = guiGetScreenSize()

wnd = guiCreateWindow((screenW - 590) / 2, (screenH - 302) / 2, 300, 302, "اللوحة الرئيسية", false)

playerLists = guiCreateGridList(18, 52, 126, 233, false, wnd)

column = guiGridListAddColumn( playerLists, "Players", 0.85 )

if ( column ) then

row = guiGridListAddRow ( playerLists )

guiGridListSetItemText ( playerLists, row, column, getPlayerName ( player ), false, false )

btn = guiCreateButton(174, 233, 83, 49, "الزر المطلوب", false, wnd)

end

end

)

local screenWH, screenHW = guiGetScreenSize()

wantedwnd3 = guiCreateWindow((screenWH - 325) / 2, (screenHW - 113) / 2, 325, 113, "قام لاعب بدعوتك", false)

guiWindowSetSizable(wantedwnd3, false)

guiSetVisible ( wantedwnd3, false )

btnaccept3 = guiCreateButton(27, 41, 108, 52, "Acceept ><", false, wantedwnd3)

btnrefuse3 = guiCreateButton(182, 41, 108, 52, "Refuse ><", false, wantedwnd3)

-----------------------------------------------

حابب لما يختار لاعب يتحقق من فلوس كلا من اللى ارسل الدعوة واللى استلم الدعوة

بعدها لو كان معهم الفلوس يرسل دعوة للشخص اللى انا حددته بالجريد ليست

بعدها لو وافق الشخص من خلال الزر btnaccept3

ينقلنى انا الشخص اللى ارسلت الدعوة وهو الشخص اللى وافق على الدعوة لمكان انا احدده من خلال setElementPosition

طبعا معظم اللى قلته سهل بس المشكلة ان لما اللاعب الثانى يوافق يكون الكود مختلف لان الحدث يكون onClientGUIClick

ويكون اللوكل هو اللى تم ارسال له الدعوة فتكون الصعوبة انى احدد اللاعب اللى ارسل الدعوة له

لو مافهمت الجزئية ذى سويلى الكود كامل عشان لا تتلخبط .. الجزئية كنت كاتبها عشان لا تفهم شئ ثانى .

------------------------------------------------

Link to comment

الطريقه اسهل مماتتخيل, شوف ذا مثال,

addCommandHandler ( 'g', function ( plr, _, name ) 
    if name then 
        if getPlayerFromName ( name ) then 
            setElementData ( resourceRoot, 'inv', { c = plr, n = getPlayerFromName (name) } ) 
            -- { c = اللاعب اللي ارسل الدعوه, n = اللاعب اللي وصلته الدعوه} 
            -- ... كمل اللي تبي تسويه 
    else 
            outputChatBox ( "There's no player.", plr ) 
        end 
    else 
            outputChatBox ( "You must write player name.", plr ) 
    end 
end) 

بعدين اذا تبي تجيب اللاعب اللي ارسل الدعوه او اللي وصلته الدعوه تسوي كذا

getElementData ( resourceRoot, 'inv' ).c -- اللاعب اللي ارسل الدعوه 
getElementData ( resourceRoot, 'inv' ).n -- اللاعب اللي وصلته الدعوه 

مثال :

btn = guiCreateButton(...)  
  
addEventHandler ( 'onClientGUIClick', btn, function ( ) 
    if getElementData ( resourceRoot, 'inv' ) then 
            setElementPosition ( getElementData ( resourceRoot, 'inv' ).c, x, y, z ) -- ننقل اللي ارسل الدعوه فقط 
    else 
            outputChatBox ( "There's no data!" ) 
    end 
end) 

واذا نقلت اللاعب وخلصت احذف الداتا او غير قيمتها .

Link to comment
الطريقه اسهل مماتتخيل, شوف ذا مثال,

addCommandHandler ( 'g', function ( plr, _, name ) 
    if name then 
        if getPlayerFromName ( name ) then 
            setElementData ( resourceRoot, 'inv', { c = plr, n = getPlayerFromName (name) } ) 
            -- { c = اللاعب اللي ارسل الدعوه, n = اللاعب اللي وصلته الدعوه} 
            -- ... كمل اللي تبي تسويه 
    else 
            outputChatBox ( "There's no player.", plr ) 
        end 
    else 
            outputChatBox ( "You must write player name.", plr ) 
    end 
end) 

بعدين اذا تبي تجيب اللاعب اللي ارسل الدعوه او اللي وصلته الدعوه تسوي كذا

getElementData ( resourceRoot, 'inv' ).c -- اللاعب اللي ارسل الدعوه 
getElementData ( resourceRoot, 'inv' ).n -- اللاعب اللي وصلته الدعوه 

مثال :

btn = guiCreateButton(...)  
  
addEventHandler ( 'onClientGUIClick', btn, function ( ) 
    if getElementData ( resourceRoot, 'inv' ) then 
            setElementPosition ( getElementData ( resourceRoot, 'inv' ).c, x, y, z ) -- ننقل اللي ارسل الدعوه فقط 
    else 
            outputChatBox ( "There's no data!" ) 
    end 
end) 

واذا نقلت اللاعب وخلصت احذف الداتا او غير قيمتها .

للو افترضنا لاعبين سوو الكوماند

بتروح الداتا الاولى وبتجي الجديدة

Link to comment

اذ تبي ترسل دعوة استخدم

triggerServerEvent("onPlayerInvite", localPlayer, to) 

to : هو الاعب الي تبي ترسله دعوة

بعدين استخدم ذا الكود

Server

addEvent("onPlayerInvite", true) 
addEventHandler("onPlayerInvite", root, function(to) 
    triggerClientEvent(to, "showAcceptWindow", to, source) 
end) 

Client

invites = { } 
addEvent("showAcceptWindow", true) 
addEventHandler("showAcceptWindow", root, function(from) 
    guiSetVisible(window, true) 
    showCursor(true) 
    invites[source] = from 
end) 
  
addEventHandler("onClientGUIClick", resourceRoot, function( ) 
    if invites[localPlayer] and (source == accept or source == decline) then 
        if source == accept then 
            setElementPosition(localPlayer, x, y, z) 
            setElementPosition(invites[localPlayer], x, y, z) 
        end 
        guiSetVisible(window, false) 
        showCursor(false) 
        invites[source] = nil 
    end 
end) 

accept : زر القبول

decline : زر الرفض

window : نافذة القبول والرفض

x, y, z : مكان الاجتماع

Link to comment

اذ تبي ترسل دعوة استخدم

triggerServerEvent("onPlayerInvite", localPlayer, to)

to : هو الاعب الي تبي ترسله دعوة

بعدين استخدم ذا الكود

Server

addEvent("onPlayerInvite", true)
addEventHandler("onPlayerInvite", root, function(to)
    triggerClientEvent(to, "showAcceptWindow", to, source)
end)

Client

invites = { } 
addEvent("showAcceptWindow", true) 
addEventHandler("showAcceptWindow", root, function(from) 
    guiSetVisible(window, true) 
    showCursor(true) 
    invites[source] = from 
end) 
  
addEventHandler("onClientGUIClick", resourceRoot, function( ) 
    if invites[localPlayer] and (source == accept or source == decline) then 
        if source == accept then 
            setElementPosition(localPlayer, x, y, z) 
            setElementPosition(invites[localPlayer], x, y, z) 
        end 
        guiSetVisible(window, false) 
        showCursor(false) 
        invites[source] = nil 
    end 
end) 

accept : زر القبول

decline : زر الرفض

window : نافذة القبول والرفض

x, y, z : مكان الاجتماع

تسلم يابطل اشتغل

انا مسوى انه ياخد فلوس فلازم فرع سيرفر

انا ظبطها واشتغل الحمدلله

انا كنت مسوى نفس الفكرة وكانت شغالة بس تدرى وش كانت المشكلة انى ماكنت مسوى جدول

فكان لو فى اكتر من دعوة يتلخبط الدنية xD

بس ممكن تشرحلى فائدة الجدول بالموضوع بشكل موضح أكثر

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...