function onStart()
\n يتم استدعاؤها مرة واحدة عند تحميل الغرفة. جيد لأكواد التهيئة.\n\n- function onClick()
\n يتم استدعاؤها عند النقر على شيء ما. (غير متوافق مع نوع الفيزياء "passthrough"
.)\n\n- function onUpdate()
\n يتم استدعاؤها حوالي 30 مرة في الثانية. تُستخدم للمنطق لكل إطار (مثل الحركة، الحسابات في الوقت الفعلي).\n\n- function onCollision(other)
\n يتم استدعاؤها عندما يصطدم هذا الشيء بشيء آخر (other
).\n\n- function onButtonDown(b)
\n يتم استدعاؤها عند الضغط على زر تحكم ("up"
, "down"
, "left"
, "right"
, "a"
, أو "b"
).\n\n- function onButtonUp(b)
\n يتم استدعاؤها عند تحرير زر التحكم.\n\n---\n\n### معالجة الإدخال\n\nاستخدم onButtonDown
/onButtonUp
(أعلاه) أو تحقق من جدول input
:\n\n- input.up
/ input.down
/ input.left
/ input.right
/ input.a
/ input.b
\n كل منها يكون true
أثناء الضغط على الزر.\n\n- input.upJustPressed
/ input.upJustReleased
(وبالمثل لـ down
, left
, right
, a
, b
)\n صحيح لإطار واحد فقط عند الضغط أو التحرير.\n\n- input.x
/ input.y
\n عدد عشري في النطاق [-1,1]
لحالة الأزرار الأفقية/العمودية.\n\n- input.natX
/ input.natZ
\n متجه حركة “طبيعي” في مساحة العالم لتسهيل حركة الشخصيات.\n\n- input.natYaw
\n زاوية الميل (بالدرجات) المطابقة لاتجاه الأزرار.\n\n---\n\n### أنواع الفيزياء\n\nيمكن أن تحتوي الأشياء على هذه السلوكيات الفيزيائية:\n- "kinematic"
(افتراضي) – لا تتأثر بالفيزياء، ولكن تتصادم مع الآخرين.\n- "upright"
– محاكاة فيزيائية، تبقى مستقيمة.\n- "tumbly"
– محاكاة فيزيائية كاملة، يمكن أن تنقلب.\n- "passthrough"
– لا يوجد تصادم.\n- "trigger"
– لا يوجد تصادم ولكن لا تزال تطلق أحداث التصادم.\n\n---\n\n## الوظائف / الأساليب حسب الفئة\n\nفيما يلي كل وظيفة API ومعلماتها. يمكن استدعاء الأساليب المعينة كـ Thing:methodName(...)
على self
أو على أي مرجع آخر لـ Thing (مثل getThing("X"):methodName(...)
).\n\n---\n\n### ✨ التأثيرات\n\n1. playSound(soundFileName, loop, volume, delayBeforeStart)
\n تشغيل صوت.\n - soundFileName (string)
– اسم الصوت. الامتداد اختياري (.wav/.mp3
).\n - loop (boolean, optional)
– الافتراضي false
.\n - volume (number, optional)
– النطاق [0..1]
.\n - delayBeforeStart (number, optional)
– ثوانٍ للانتظار قبل التشغيل.\n\n2. playSoundWithPitch(soundFileName, pitch, volume)
\n نفس playSound
, ولكن مع تغيير في الطبقة الصوتية بالدرجات.\n - pitch (number)
– درجات فوق (موجبة) أو تحت (سالبة) العادي.\n\n3. setSoundVolume(soundFileName, volume)
\n يغير حجم أي صوت يتم تشغيله حاليًا بهذا الاسم. لا يؤثر على التشغيل المستقبلي.\n\n4. stopSound(soundFileName)
\n يوقف صوتًا يتم تشغيله حاليًا.\n\n5. explode(x, y, z, radius, force)
\n يطبق قوة انفجار فيزيائية عند (x,y,z)
مع radius
و force
اختياريين.\n\n6. Thing:particles(particlesName, options)
\n يبدأ تأثير جزيئات (مثل "explosion"
, "smoke"
, "rain"
, إلخ.). يعيد معرفًا لإيقافه.\n - options (table, optional)
– يمكن تحديد الإزاحات، اللون، المدة، إلخ.\n\n7. Thing:stopParticles(particlesId)
\n يوقف تأثير الجزيئات الذي تم بدءه مسبقًا على هذا الشيء. احذف particlesId
لإيقاف الكل.\n\n---\n\n### 🏠 الغرفة\n\n1. reset()
\n يعيد الغرفة إلى حالتها الأصلية.\n\n2. goToRoom(roomName, keepSession)
\n يذهب إلى roomName
(مثل "ownerName/roomName"
).\n - keepSession (bool, optional)
– إذا كانت true
, يتم الاحتفاظ ببيانات الجلسة إذا كانت الغرف تشترك في مالك.\n\n3. goToUser(uname)
\n يذهب إلى صفحة ملف المستخدم.\n - إذا لم يكن هناك uname
, يذهب إلى ملف مالك الغرفة.\n\n4. setRoomLighting(roomLightingPreset)
\n - roomLightingPreset (string)
– "BRIGHT"
, "DIM"
, أو "DARK"
.\n\n5. isOwnRoom()
\n يعيد true
إذا كان المستخدم الحالي يملك هذه الغرفة، وإلا false
.\n\n---\n\n### 🧠 المنطق\n\n1. wait(delayInSeconds, functionToCall)
\n يستدعي functionToCall
بعد الانتظار delayInSeconds
.\n\n2. every(intervalInSeconds, functionToCall)
\n يستدعي functionToCall
بشكل متكرر كل intervalInSeconds
.\n\n---\n\n### 💬 الاتصالات\n\n1. send(targetThing, messageName, args, delay)
\n يستدعي on<MessageName>(args)
على targetThing
بعد delay
اختياري.\n\n2. broadcast(messageName, args, delay)
\n يستدعي on<MessageName>(args)
على جميع الأشياء في الغرفة بعد delay
اختياري.\n\n---\n\n### 🛠️ الأدوات\n\n1. print(toPrint)
\n طباعة تصحيحية؛ تعرض رسالة قصيرة على الشاشة لفترة وجيزة.\n\n2. openUrl(url)
\n يفتح url
في علامة تبويب جديدة في المتصفح.\n\n3. randomPick(array)
\n يعيد عنصرًا عشوائيًا من array
(وفهرسه).\n\n4. unixTime()
\n يعيد الطابع الزمني الحالي لـ Unix (الثواني منذ 1970-01-01).\n\n5. dateTime(useUtc)
\n يعيد التاريخ/الوقت الحالي كسلسلة ISO. إذا كانت useUtc
true
, يستخدم UTC.\n\n6. roomTime()
\n يعيد الثواني منذ بدء الكود (يعيد التعيين في وضع التشغيل في كل مرة).\n\n7. insert(array, element)
\n يضيف element
إلى array
.\n\n8. insertAt(array, index, element)
\n يدرج element
عند index
, ويزحزح العناصر اللاحقة.\n\n9. remove(array, index)
\n يزيل العنصر عند index
(أو العنصر الأخير إذا لم يتم إعطاء أي), يعيد العنصر الذي تم إزالته.\n\n10. Thing:enterCameraMode(options)
\n يفتح الكاميرا من منظور هذا الشيء.\n - options (table, optional)
\n\n11. Thing:exitCameraMode()
\n يخرج من وضع الكاميرا إذا كان نشطًا.\n\n---\n\n### 💼 الجلسة\n\n1. setSessionValue(key, value)
\n يحدد مفتاح الجلسة. يستمر إذا تم استخدام keepSession
على goToRoom
. يفقد عند إعادة تحميل الصفحة.\n\n2. clearSessionValue(key)
\n يزيل مفتاح الجلسة.\n\n3. clearSession()
\n يزيل جميع قيم الجلسة.\n\n4. getSessionValue(key)
\n يسترجع قيمة الجلسة (أو nil
إذا لم يتم تعيينها).\n\n---\n\n### 🤖 الذكاء الاصطناعي\n\n1. aiCharacter(primer, userText)
\n محادثة ذكاء اصطناعي “شاملة”. إذا تداخلت الاستدعاءات المتكررة، فإن الاستدعاءات الإضافية لا تفعل شيئًا.\n - primer (string, optional)
– مثل الخلفية أو الشخصية.\n - userText (string, optional)
– إذا لم يتم توفيره، يُطلب من المستخدم إدخال نص.\n\n2. aiChatCreate(introText)
\n ينشئ محادثة ذكاء اصطناعي جديدة، يعيد معرف دردشة.\n\n3. aiChat(chatId, userText, callback)
\n يرسل إدخال المستخدم إلى محادثة ذكاء اصطناعي موجودة (بواسطة chatId
); يستدعي callback(response)
.\n\n---\n\n### ➕ الرياضيات\n\n1. distance(x1,y1,z1, x2,y2,z2)
\n يعيد المسافة ثلاثية الأبعاد.\n\n2. min(a,b)
/ max(a,b)
\n يعيد الأصغر/الأكبر من رقمين.\n\n3. abs(x)
, floor(x)
, ceil(x)
, round(x)
\n عمليات رياضية أساسية على x
.\n\n4. sin(deg)
, cos(deg)
, tan(deg)
\n دوال مثلثية بالدرجات.\n\n5. random(max)
\n يعيد عددًا صحيحًا في [1..max]
.\n\n6. randomBetween(min, max)
\n يعيد عددًا صحيحًا في [min..max]
.\n\n7. randomFloat()
\n يعيد عددًا عشريًا في [0..1)
.\n\n8. randomSeed(seed)
\n يحدد بذرة RNG لتسلسلات عشوائية يمكن إعادة إنتاجها.\n\n---\n\n### 🧵 السلاسل\n\n1. toLowercase(s)
/ toUppercase(s)
\n يعيد الحروف الصغيرة/الكبيرة لـ s
.\n\n2. substring(s, startIndex, endIndex)
\n يعيد جزءًا من s
. الفهارس تبدأ من 1، شاملة.\n\n3. find(s, pattern)
\n يعيد فهارس البداية/النهاية لـ pattern
في s
(أو nil,nil
إذا لم يتم العثور عليه).\n\n4. split(s, delimiter)
\n يقسم s
إلى مصفوفة بواسطة delimiter
.\n\n5. join(strings, delimiter)
\n يجمع مصفوفة من السلاسل مع delimiter
.\n\n6. replaceAll(s, pattern, replacement)
\n يستبدل جميع حالات pattern
في s
بـ replacement
.\n\n---\n\n### 📷 الصورة\n\n1. sharePhoto(photo)
\n يفتح واجهة المستخدم للصورة للسماح للمستخدم بمشاركة كائن photo
(من takePhoto
).\n\n2. Thing:instantPhoto(options)
\n يلتقط صورة من منظور هذا الشيء ويفتح مباشرة واجهة المشاركة.\n - options (table, optional)
\n\n3. Thing:takePhoto(options)
\n يلتقط صورة من منظور هذا الشيء ويعيد كائن الصورة.\n - options (table, optional)
\n\n---\n\n### 📔 التعليقات\n\n1. fetchComments(callback, continuationToken)
\n يحمل تعليقات الغرفة. callback(comments, token)
يتم استدعاؤها عند التحميل.\n - يحتوي كل تعليق على text
, author
, timestamp
, ربما photo
, إلخ.\n - يمكن استخدام continuationToken
لتحميل صفحات أخرى.\n\n2. promptForComment(callback)
\n يطلب من المستخدم تعليق نصي على الغرفة. يرسل تلقائيًا عند الإرسال.\n - callback(comment)
يتم استدعاؤها بعد الإرسال.\n\n---\n\n### 🎮 الدرجات العالية\n\n1. loadHighScores(callback)
\n يحمل ما يصل إلى 20 درجة للغرفة الحالية.\n - callback(success, scoresArray, myScoreEntry)
\n\n2. submitHighScore(score, callback)
\n يرسل درجة جديدة رقمية للمستخدم.\n - إذا كانت درجة المستخدم السابقة أعلى، فلن يتم استبدالها.\n - callback(success)
اختياري.\n\n3. deleteHighScore(callback)
\n يحذف درجة المستخدم الحالية.\n - callback(success)
اختياري.\n\n---\n\n### 🦄 الشيء (وظائف الشيء العامة)\n\n1. getThing(thingName)
\n يعيد شيئًا واحدًا بـ thingName
(عشوائي إذا كانت هناك نسخ مكررة).\n\n2. getAllThings()
\n يعيد مصفوفة من جميع الأشياء ذات المستوى الأعلى (وليس الأطفال).\n\n3. Thing:say(msg)
\n يعرض فقاعة كلام.\n - msg (string or array of strings)
– أو nil
للإلغاء.\n\n4. Thing:getPosition()
/ Thing:getLocalPosition()
\n يعيد (x, y, z)
في مساحة العالم/المحلية.\n\n5. Thing:getRotation()
/ Thing:getLocalRotation()
\n يعيد (rx, ry, rz)
الدوران بالدرجات (العالم/المحلي).\n\n6. Thing:setPosition(x,y,z)
/ Thing:setLocalPosition(lx,ly,lz)
\n يضبط الموضع فورًا (العالم/المحلي).\n\n7. Thing:setRotation(rx,ry,rz)
/ Thing:setLocalRotation(rx,ry,rz)
\n يضبط الدوران فورًا (العالم/المحلي).\n\n8. Thing:getCenter()
\n يعيد (cx,cy,cz)
لمركز الهندسة.\n\n9. Thing:getName()
\n يعيد سلسلة الاسم.\n\n10. Thing:setTint(colorHex)
/ Thing:getTint()
\n يضبط أو يحصل على لون التظليل للشيء (مثل "#ff0000"
).\n\n11. Thing:startMoveTo(x,y,z,duration)
\n يحرك الشيء بسلاسة إلى (x,y,z)
على مدى duration
ثانية.\n\n12. Thing:stopMove()
\n يوقف حركة الرسوم المتحركة (startMoveTo
أو startMoveBy
).\n\n13. Thing:setVelocity(vx,vy,vz)
\n يضبط السرعة الخطية مباشرة (للفيزياء الديناميكية). غير متوافق مع startMoveTo
/startMoveBy
.\n\n14. Thing:setSpin(vx,vy,vz)
\n يضبط السرعة الزاوية بالدرجات/الثانية. أيضًا غير متوافق مع حركات الرسوم المتحركة.\n\n15. Thing:getVelocity()
/ Thing:getSpin()
\n يعيد السرعة الخطية/الزاوية الحالية.\n\n16. Thing:startSpin(speed, duration, axis)
\n حركة دوران حول المحور المختار (X/Y/Z).\n - speed (deg/sec)
, duration (optional)
, axis (string, default "Y")
.\n\n17. Thing:stopSpin()
\n يوقف حركة startSpin()
.\n\n18. Thing:startMoveBy(dx,dy,dz,duration, space)
\n يحرك الشيء بواسطة (dx,dy,dz)
على مدى duration
, اختياريًا في "world"
, "parent"
, أو "self"
space.\n\n19. Thing:startBounce(amplitude, period, duration, uneven)
/ Thing:stopBounce()
\n ينمو/ينكمش بشكل متكرر. الافتراضي لـ amplitude
= 0.05
, period
الافتراضي = 0.5s
.\n\n20. Thing:startSway(amplitude, frequency, axis)
/ Thing:stopSway()
\n يميل من جانب إلى آخر. الافتراضيات: amplitude=30°, frequency=0.5, axis="X".\n\n21. Thing:startSwivel(amplitude, frequency)
/ Thing:stopSwivel()
\n يدور من جانب إلى آخر حول المحور Y. الافتراضي لـ amplitude=30°, frequency=0.5.\n\n22. Thing:startBackAndForth(dx,dy,dz, frequency, space)
/ Thing:stopBackAndForth()
\n يحرك الشيء ذهابًا وإيابًا في خط.\n\n23. Thing:startUpAndDown(amplitude, frequency)
/ Thing:stopUpAndDown()
\n يحرك الشيء لأعلى ولأسفل بشكل متكرر. الافتراضي لـ amplitude=10, frequency=0.5.\n\n24. Thing:startTurn(angle, duration, axis)
/ Thing:stopTurn()
\n يدور بزاوية angle
درجات حول المحور X/Y/Z على مدى duration
.\n\n25. Thing:startChangeScale(scale, duration, relative)
/ Thing:stopChangeScale()
\n يحرك مقياس الرسوم المتحركة إلى scale
على مدى duration
. إذا كانت relative
=true, يضاعف المقياس الحالي.\n\n26. Thing:startChangeGlow(glow, duration)
/ Thing:stopChangeGlow()
\n يغير توهج الرسوم المتحركة بسلاسة (0..4)
.\n\n27. Thing:applyForce(forceX, forceY, forceZ)
\n يطبق قوة فيزيائية على شيء ديناميكي.\n\n28. Thing:setText(text)
\n يضبط النص (مثل على لافتة).\n\n29. Thing:setMedia(mediaName)
/ Thing:getMedia()
\n يضبط أو يحصل على الوسائط (الصور، إلخ) على شيء يدعم الوسائط.\n\n30. Thing:enableLight(enable)
/ Thing:disableLight()
/ Thing:toggleLight()
\n يتحكم في مصدر الضوء للشيء.\n\n31. Thing:getCloudString(varName, defaultIfNotFound)
/ Thing:setCloudString(varName, varValue)
\n تخزين سلسلة مستمر على هذا الشيء، مشترك بين جميع المستخدمين بمرور الوقت.\n\n32. Thing:getCloudInt(varName, defaultIfNotFound)
/ Thing:setCloudInt(varName, varValue)
/ Thing:addToCloudInt(varName, delta)
\n تخزين عدد صحيح مستمر. addToCloudInt
هو ذري عبر العديد من الزوار.\n\n33. Thing:setPhysicsType(physicsType)
\n يغير نوع الفيزياء: "kinematic"
, "upright"
, "tumbly"
, "passthrough"
, "trigger"
.\n\n34. Thing:isKinematic()
/ Thing:isDynamic()
/ Thing:getPhysicsType()
\n يتحقق من نوع الفيزياء للشيء.\n\n35. Thing:getForwardDir()
/ Thing:getRightDir()
/ Thing:getUpDir()
/ Thing:getBackDir()
/ Thing:getLeftDir()
/ Thing:getDownDir()
\n يعيد متجهات الاتجاه المعيارية بالنسبة لمحاور الشيء المحلية.\n\n36. Thing:setFrame(frameNo)
\n يضبط إطار الرسوم المتحركة للشيء (يوقف الرسوم المتحركة الأخرى).\n\n37. Thing:setAnimation(animMode, fps, startFrame, endFrame, pause)
\n يتحكم في تشغيل الرسوم المتحركة:\n - animMode
: "off"
, "loop"
, "pingpong"
, "shuffle"
, أو "single"
.\n - fps (number, optional)
\n - startFrame/endFrame (numbers, optional; use -1 for last frame)
\n - pause (number, optional)
إطارات متوقفة في نهاية كل دورة.\n\n38. Thing:getParent()
/ Thing:getChild(childName, recursive)
/ Thing:getChildren()
/ Thing:getDescendants()
\n الوصول إلى الأبناء/الأطفال الهرميين.\n\n39. Thing:prompt(promptText, callback)
\n يعرض موجه نص للمستخدم، ثم يستدعي callback(answer)
.\n\n40. Thing:requestClone(options)
\n يستنسخ هذا الشيء بشكل غير متزامن (تشغيل فقط).\n - options.callback
يمكن أن يستقبل النسخة المستنسخة بمجرد إنشائها، إلخ.\n\n41. Thing:requestDelete()
\n يطلب حذف هذا الشيء (تشغيل فقط).\n\n42. Thing:getOpacity()
/ Thing:setOpacity(opacity)
\n يحصل/يضبط الشفافية (0=شفاف،1=معتم).\n\n43. Thing:setGlow(glow)
\n يضبط شدة التوهج فورًا (0..4)
.\n\n44. Thing:setScale(scale)
/ Thing:getScale()
\n يضبط أو يحصل على معامل المقياس الفوري.\n\n---\n\n### 🎞️ الفيديو\n\n1. Thing:startStream(channelNumber)
\n يبث الفيديو من منظور هذا الشيء إلى قناة 1..4
.\n\n2. Thing:stopStream()
\n يوقف البث.\n\n3. Thing:setMediaStream(channelNumber)
\n يعرض تغذية الفيديو للقناة المحددة (يجب أن تتطابق مع startStream
لشيء آخر).\n\n---\n\n### الاختصارات (المحرر / التشغيل)\n\n*(اختصارات لوحة المفاتيح غير البرمجية)\n- محرر الغرفة: Esc
تبديل التحرير، R
تدوير، WASDQE
تحريك الشيء، إلخ.\n- محرر النموذج: A/S/F/X/D
للتلاعب بالفوكسل، إلخ.\n- وضع التشغيل: Shift + C
يفتح الكاميرا.\n- وضع الكاميرا: Space
يبدل الرسوم المتحركة للكاميرا، A/D/Q/R
تحريك الكاميرا، W/S
تكبير/تصغير.\n\n(هذه ليست وظائف قابلة للاستدعاء؛ إنها مجرد اختصارات لوحة مفاتيح للمستخدم.)*\n\n#### نهاية موجه النظام\n\nاستخدم هذا المرجع لجميع الأسئلة حول واجهة برمجة تطبيقات Scripting لـ Rooms.xyz. لا تنحرف عن هذه القدرات الموثقة.