Jump to content

استفسارات عن البرمجة


Recommended Posts

مثال تسوي نظام حفظ الاحداثيات بـ SQL ( Serial ) ..

اول شيء نسوية نظيفة للقاعدة نسوي جدول بالقاعدة registry.db

لانه الفنكشن حق SQL

يستخدم قاعدهـ ( registry ) ..

اول شيء نسوي جدول داخل قاعدة :

addEventHandler('onResourceStart',resourceRoot, 
    function (      ) 
        local CreateNewTable = executeSQLQuery ('CREATE TABLE IF NOT EXISTS  `Save Position System` ( PlayerSerial,PlayerX,PlayerY,PlayerZ ) ') 
            if ( CreateNewTable ) then 
                outputDebugString('Create [ Save Position System ] Table done .') 
        end 
    end 
) 

اللي سويتة انا :

executeSQLQuery ('CREATE TABLE IF NOT EXISTS  `Save Position System` ( PlayerSerial,PlayerX,PlayerY,PlayerZ ) ') 

بس سويت متغير او مسمى للتيبل اللي بيتخزن بقاعدتنا الاولى و سويت الكولومن اللي احتاجهم على حسب اللي تسوية انا سويت هذولا :

PlayerSerial = بخزنة عالسريال

PlayerX = احداثي X

PlayerY = احداثي Y

PlayerZ = احداثي Z

وسميت الجدول حق القاعدة :

Save Position System = نظام حفظ الاحداثيات

الحين سوينا القاعدة عشان بـ استخدم :

executeSQLQuery ( 'CREATE TABLE IF NOT EXISTS MyTable or `MY TABLE` or 'My Table' ( column,... )' ) 

الحين ودكـ تخزن الاشياء صح ؟ انا بخزنها يوم يطلع الاعب من الروم . . :

addEventHandler('onPlayerQuit',root, 
    function (  ) 
    local x,y,z = getElementPosition ( source ) 
    local Results = executeSQLQuery("SELECT * FROM `Save Position System` WHERE PlayerSerial=?",getPlayerSerial ( source ) ) 
     if ( type ( Results ) == "table" and #Results == 0 or not Results ) then 
        executeSQLQuery ( "INSERT INTO `Save Position System` ( PlayerSerial,PlayerX,PlayerY,PlayerZ ) VALUES(?,?,?,?)",getPlayerSerial ( source ),x,y,z ) 
    else 
        executeSQLQuery('UPDATE `Save Position System` SET PlayerX =?, PlayerY =?, PlayerZ =? WHERE PlayerSerial =?',x,y,z,getPlayerSerial ( source ) ) 
    end 
end 
) 

الاشياء و الوظائف الثانية معروفة .. بس بوضح لك الـ ( SQL ) :

اول شيء نجيب النتائج عشان قبل لانخزن نتحقق اذا فية شيء مخزن نسوي لة تحديث مانخزن من جديد ~ :

local Results = executeSQLQuery("SELECT * FROM `Save Position System` WHERE PlayerSerial=?",getPlayerSerial ( source ) ) 

و الـ

Results يعتبر جدول لانة جدول اصلا .. الحين جبنا نتائج نتحقق :

if ( type ( Results ) == "table" and #Results == 0 or not Results ) then 
  

اذا ماكان فية شيء مخزن او او او التيبل = 0 نسوي ادخال للبيانات على سريال الاعب بالترتيب من الـ

Column اللي مسوية !

executeSQLQuery ( "INSERT INTO `Save Position System` ( PlayerSerial,PlayerX,PlayerY,PlayerZ ) VALUES(?,?,?,?)",getPlayerSerial ( source ),x,y,z ) 

اذا اول مرة تسوية ولا اذا كان مخزن تسوي تحديث بس ~ طبعا واضحة الاشياء من قبل

PlayerSerial = بخزنة عالسريال

PlayerX = احداثي X

PlayerY = احداثي Y

PlayerZ = احداثي Z

و اسم التيبل حق القاعدة واضح ~

و الـ

VALUES ( ?,?,? )

تكون على حسب اللي انت تحتاجها اصلا .. امم الحين نفرض انة مخزن من قبل ! ومسوي ادخال للبيانات وحصلها بالقاعدة وش المفترض تخزن ثانية ؟ لآ ~ : نسوي تحديث للبيانات :

executeSQLQuery('UPDATE `Save Position System` SET PlayerX =?, PlayerY =?, PlayerZ =? WHERE PlayerSerial =?',x,y,z,getPlayerSerial ( source ) ) 

SET = ? Wiki

WHERE = ? Wiki

UPDATE = ? Wiki

انت تحدث على مين ؟ على سريال الاعب

WHERE PlayerSerial =? -- التحديث بيكون عالسريال الخاص بالاعب #

الحين حفظنآ يوم خرج الاعب بنحمل البيانات يوم يسجل دخولة الاعب :

addEventHandler('onPlayerLogin',root, 
    function (  ) 
        local Results = executeSQLQuery("SELECT * FROM `Save Position System` WHERE PlayerSerial=?",getPlayerSerial ( source ) ) 
        if ( type ( Results ) == "table" and #Results == 0 or not Results ) then return end 
            setTimer( setElementPosition,2000,1,source,Results[1]['PlayerX'],Results[1]['PlayerY'],Results[1]['PlayerZ'] ) 
    end 
) 

انت اللي عليك بس تبي تجيب بيانات من اللي مخزنة ؟ بيانات السريال ! صح ؟ زين سويناها :

local Results = executeSQLQuery("SELECT * FROM `Save Position System` WHERE PlayerSerial=?",getPlayerSerial ( source ) ) 

مع اسم التيبل حق القاعدة بـ التأكيد .. الحين نتحقق فية بيانات عندي ولالا ؟ :

if ( type ( Results ) == "table" and #Results == 0 or not Results ) then return end 

اذا مافية خلاص مايسوي شيء ويكنسل ..

اذا فية بيكمل وبيسوي لك setElementPosition :

setTimer( setElementPosition,2000,1,source,Results[1]['PlayerX'],Results[1]['PlayerY'],Results[1]['PlayerZ'] ) 

Results[1]['PlayerX'],Results[1]['PlayerY'],Results[1]['PlayerZ'] = ?

هذي من وين جبتها ؟ هذي الاشياء اللي انت سويتها

Column

فية طريقة ثانية استخرج فيها اطول شوي شوف :

for _,v in ipairs ( Results ) do 
       setElementPosition ( source,v.PlayerX,v.PlayerY,v.PlayerZ ) 
end 

و بكذآ سوينا نظام حفظ للاحداثيات عن طريق : SQL

أتمنى وصلتكـ المعلومة بكل وضوح وهذا السكربت بشكل كامل يطلع :

addEventHandler('onResourceStart',resourceRoot, 
    function (      ) 
        local CreateNewTable = executeSQLQuery ('CREATE TABLE IF NOT EXISTS  `Save Position System` ( PlayerSerial,PlayerX,PlayerY,PlayerZ ) ') 
            if ( CreateNewTable ) then 
                outputDebugString('Create [ Save Position System ] Table done .') 
        end 
    end 
) 
  
addEventHandler('onPlayerQuit',root, 
    function (  ) 
    local x,y,z = getElementPosition ( source ) 
    local Results = executeSQLQuery("SELECT * FROM `Save Position System` WHERE PlayerSerial=?",getPlayerSerial ( source ) ) 
     if ( type ( Results ) == "table" and #Results == 0 or not Results ) then 
        executeSQLQuery ( "INSERT INTO `Save Position System` ( PlayerSerial,PlayerX,PlayerY,PlayerZ ) VALUES(?,?,?,?)",getPlayerSerial ( source ),x,y,z ) 
    else 
        executeSQLQuery('UPDATE `Save Position System` SET PlayerX =?, PlayerY =?, PlayerZ =? WHERE PlayerSerial =?',x,y,z,getPlayerSerial ( source ) ) 
    end 
end 
) 
  
addEventHandler('onPlayerLogin',root, 
    function (  ) 
        local Results = executeSQLQuery("SELECT * FROM `Save Position System` WHERE PlayerSerial=?",getPlayerSerial ( source ) ) 
        if ( type ( Results ) == "table" and #Results == 0 or not Results ) then return end 
            setTimer( setElementPosition,2000,1,source,Results[1]['PlayerX'],Results[1]['PlayerY'],Results[1]['PlayerZ'] ) 
    end 
) 

بـ التوفيق .. اي شيء تفضل أسأل عنة .. :)

Link to comment
  • 2 weeks later...

هذا الموضوع لشرح الاكواد والاستفسار عنها انتم قلبتوها طلبات

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

نسوي لك اكودا جاهزه على اساس انك جاي تتعلم , عجيب امركم #

Link to comment
هذا الموضوع لشرح الاكواد والاستفسار عنها انتم قلبتوها طلبات

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

نسوي لك اكودا جاهزه على اساس انك جاي تتعلم , عجيب امركم #

مو معاجبك لا تشرح

Link to comment

اتوقع ان الفنكشن واضح من اسمه

وغير كذا فيه مثال عليه في الويكي

function getPlayerFromSerial ( serial ) 
    assert ( type ( serial ) == "string" and #serial == 32, "getPlayerFromSerial - invalid serial" ) 
    for index, player in ipairs ( getElementsByType ( "player" ) ) do 
        if ( getPlayerSerial ( player ) == serial ) then 
            return player 
        end 
    end 
    return false 
end 

هذا يجلب اللاعب من سرياله

يعني زي كذا

getPlayerFromSerial ("serial") 

تحط سريال اللاعب فوق

وبس .. اتوقع انها سهله وما يبغالها شرح لاكن بحطها لك في مثال بسيط

addCommandHandler ("command", 
    function (plr, _, serial) 
        if (serial) then 
            local player = getPlayerFromSerial (serial) 
            if (player) then 
                outputChatBox ("Hello Player", player, 0, 255, 0) 
            else 
                outputChatBox ("Player not found.", plr, 255, 0, 0) 
            end 
        else 
            outputChatBox ("You must write a serial.", plr, 255, 0, 0) 
        end 
    end 
) 
Link to comment
ابي شرح ل settimer
setTimer 

يحط لك وقت مشان يسوي وظيفة

خلنا نشرح الارقمنتات الاول

setTimer ( function theFunction, int timeInterval, int timesToExecute) 
  

هنا الارقمنت

theFunction

هو الفنكشن اللي راح يتنفذ حط اسم الفنكشن

و الارقمنت

timeInterval

هنا المدة اللي راح تتنفذ فييها الوظيفة

1000 = ثانية

10000 = دقيقة

الارقمنت timesToExecute

عدد المرات الليي راح يتكرر فيها التايمر

يعني مثلا حطينا 3 بعدد المرات

و حطينا 5 ثواني يطلع رسالة بلشات

كل 5 ثواني راح يطلع رسالة بلشات

يعني راح تطلع 3 رسائل حسب تكرار التايمر

و تقدر تخليه تايمر غير محدود بستعمال رقم 0 حط صفر بعدد المرات

و هذا مثال سريع

  
function outputHassan()--فتح فنكشن مع الاسم 
    outputChatBox("Hassan Meke Is A Human", root, 255, 0, 0, true)--اخراج رسالة بلشات 
end--اغلاق الفنكشن 
  
setTimer(outputHassan, 50000, 5) 
  
--outputHassan يسوي الفنكشن حق اخراج الرسالة اللي اسمه  
  
--50000 يسويه كل 5 دقائق 
  
--5 راح يسويه خمس مرات و يوقف التايمر 
  

هذه توقف لك تايمر

killTimer 

isTimer 

هذه تتحقق اذا في تايمر شغال

و اتمني اكون افدتك

Link to comment
getRealTime 

هذا الفنكشن يجيب الوقت الحقيقي صح ؟

طيب وقت ايش ؟ يعني توقيت ايش ؟ :mrgreen::mrgreen:

غرينتش , السعودية , أمريكا , البحرين , مصر , السودان , ؟؟

ايش بالضبط :redhotevil:

Link to comment
coroutine 

هذا وش يسوي؟ بلتفصيل الممل

returns a table containing functions for threads

ابي شرح ل settimer
setTimer :

هو ببساطة وقت محدد لتنفيد كودكـ .. وهو يعتمد ع الميلي ثانية

وله اكثر من فنشكن تابعع له .. :

killTimer 
resetTimer 
getTimerDetails 
getTimers 

طبعا من اسمائهم واضحين .. لاكن الان افهم التايمر وانتقل لهم بـ وقت لاححق

Syntax

timer setTimer ( function theFunction, int timeInterval, int timesToExecute, [ var arguments... ] ) 

function theFunction = الفنكشن اللي بتسويه بعد وقت محدد

int timeInterval = الوقت بـ الميلي الثانية

timesToExecute = هذا ببساطة عدد مرات الـ تايمر كيف يعني ؟ .. لو حطيت صفر فـ التايمر مفتوح للابد كل الوقت المحدد يسوي كودك مدام السكربت شغال ..

لو ححطيت 1 فـ التايمر بتسويه لـ مرة واحدة فقط

[ var arguments... ] 

وهذي الارقمنات حق الفنكشن اللي ضفته وتلاحظ انها مهي اجبارية لانه في فنكشنات انت مسويها بـ السكربت نفسه وما فيها ارقمنات فـ تحطها بدون الارقمنات

طبعا مثال بسيط جدا عن تايمر لنقل اللاعب بعد 3 دقائق .. :

setTimer( setElementPosition, 180000, 1, player, x, y, z ) 

تلاحظ اول ارقمنت وش هو ؟ الفنكشن نفسه

وثاني ارقمنت الوقت بـ الميلي ثانية .. وثالث ارقمنت وهو عدد تكرار التايمر

ذذ var arguments وبعد هذول جا وقت الـ

x, y, z الاصلي الارقمنات اللي به هي الالمنت اللي تبي تنقله والـ احداثيات setElementPosition وبـ فنكشن

وهنا مستخدمينه بـ التايمر .. فـ حطينا الـ بلير وهو ع حسب كودكـ هذا مجرد مثال

والـ x, y, z

اتمنى فهمت .. اي شي ما فهمته تفضل قول #

getRealTime 

هذا الفنكشن يجيب الوقت الحقيقي صح ؟

طيب وقت ايش ؟ يعني توقيت ايش ؟ :mrgreen::mrgreen:

غرينتش , السعودية , أمريكا , البحرين , مصر , السودان , ؟؟

ايش بالضبط :redhotevil:

لو حطيته بـ جانب كلاينت راح يجيب وقت جهاز اللاعب .. لو حطيته سيرفر راح يجيب وقت بلد الخادم نفسه

يعني لو كان الخادم الماني يجيب الوقت بالنسبة لهناكـ .. عاد انت تشوف غرينتش وتشوف كم الفرق وتزود او تجيبه بـ جانب كلاينت ع حسب الوقت حق جهاز اللاعب .

Link to comment
getRealTime 

هذا الفنكشن يجيب الوقت الحقيقي صح ؟

طيب وقت ايش ؟ يعني توقيت ايش ؟ :mrgreen::mrgreen:

غرينتش , السعودية , أمريكا , البحرين , مصر , السودان , ؟؟

ايش بالضبط :redhotevil:

هذآ مثآل يجيب لكك وقت جهآز اللاعب السآعة الدقيقة الثآنية ع لبل

-- Client Side

addEventHandler ( 'onClientPreRender' , root , function (   ) 
    local Time = getRealTime ( ) 
    local H = Time .hour 
    local M = Time .minute 
    local S = Time .second 
        guiSetText ( lebal,' '..H..'/'..M..'/'..S..'') 
      end ) 

الوظيفة getRealTime تجيب لكك الثوآني والدقآيق والسآعآت والأيآم وكل شيء الا العآم :lol:

هذآ مثآل يجيب لكك الأيآم

addEventHandler ( 'onClientPreRender' , root , function (  ) 
    local RealTime = getRealTime ( ) 
    local D = RealTime.monthday 
    local M = RealTime.month 
        guiSetText ( lebal,''..D..'/'..M..'') 
    end ) 

طبعآ لآزم تستخدم الحدث onClientPreRenderأو onClientRenderأو التآيمر

لو ما أستخدمتهم كل بيتحدث الوقت ؟

أتمنى تكون فهمت السآلفة

Link to comment

next = ترجع لك المفتاح والقيمة بعد الرقم إلي حطيته في ترتيب الجدول

: مثال

Table = { "Value1", "Value2", "Value3" } -- جدول 
  
key1, value1 = next( Table ) -- لو ما حطيت رقم راح يجيب اول قيمة ومفتاح بالجدول 
key2, value2 = next( Table, 1 ) -- .. راح يجيب القيمة والمفتاح إلي بعد رقم 1 في ترتيب الجدول الخ 
key3, value3 = next( Table, 2 ) 
key4, value4 = next( Table, 3 ) 
  
print( key1, value1 ) 
print( key2, value2 ) 
print( key3, value3 ) 
print( key4, value4 ) 
  
  
1   Value1 -- جاب مفتاح عشوائي لأن مافي مفتاح 
2   Value2 
3   Value3 
nil nil -- رجع نيل لأن مافي قيمة 

Link to comment
^ تسلم علي شرحك الجميل بس لحد الان ماهي واصله الفكرة ولو تشوف الطريقة ذي كيف مستخدمها
for _, aAccounts in next, getAccounts( ) do 
  

next , ipairs = نفس الشيء أنت مخير بينهم اما تستعمل هاذي أو هاذي

for _, aAccounts in next, getAccounts( ) do 

for _, aAccounts in ipairs ( getAccounts( )) do 
Link to comment

لكن تختلف عنها بـ ترتيب الجدول والقيم ipairs زي الـ

local table  = { "Hello", "ZA7F", "Rm-Dj", "test" } 
local k, v   = next ( table, 1 ) 
          print ( v ) 

خش هنا http://www.lua.org/cgi-bin/demo

Output وحط الكود واضغط رن .. وشوف النتيجة بالمربع اللي تحت الثاني

بعدها في رقم 1 بداخل القوسين حق النكست .. غيرهـ الى 2 ولاحظ

القيمة الاولة ما جابها مع انك حاط 1

وهذا هو الكلام

Its first argument is a table and its second argument is an index in this table. next returns the next index of the table and its associated value. When called with nil as its second argument, next returns an initial index and its associated value

Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...