--- title: ऑपरेटर और आम फ़ंक्शनः XML, MD और Lua summary: सरल भाषा में प्रतीक, छोटे उदाहरण और अक्सर गलतियों की व्याख्या करने वाली एक शुरुआती धोखा पत्र। section: scripting kind: guide status: reference updated: 2026-10-26 tags: ["X4","modding","x4","language","cheatsheet"] sources: ["https://www.lua.org/manual/5.1/","https://luajit.org/extensions.html","https://wiki.egosoft.com/X%20Rebirth%20Wiki/Modding%20support/Mission%20Director%20Guide/"] --- ## इस धोखा पत्र का उपयोग कैसे करें पहले भाषा की पहचान करें। XPath, MD और Lua अलग-अलग तरह से समान इरादे व्यक्त करते हैं। यह एक चयन है जो इन उदाहरणों और परियोजना कोड को पढ़ने के लिए उपयोगी है, न कि सांख्यिकीय रैंकिंग या पूर्ण भाषा संदर्भ। शुरू करें [X4 कोड कैसे काम करता है](wiki:x4-code-basics) यदि शर्तें अपरिचित हैं। नए स्निपेट सीख रहे हैं उदाहरण, नहीं दावा किया जा रहा है खेल में परीक्षण. ## चार मूलभूत अवधारणाएँ एक चर एक मूल्य को संग्रहीत करता है। एक स्थिति चुनती है कि क्या कुछ करना है। एक फ़ंक्शन तर्क प्राप्त करता है और काम करता है, कभी-कभी परिणाम लौटाता है। एक घटना संचालक एक समारोह या MD नोड है जो किसी विशेष घटना के लिए चलाया जाता है। परिभाषित करना `getName`, बुला रहा है `getName()` और उसके लौटाए गए मूल्य को संग्रहीत करना। ## एक्सएमएल तत्व, विशेषताएं और चयनकर्ता | फॉर्म | अर्थ | | --- | --- | | `` | एक विशेषता वाला तत्व और कोई बाल सामग्री नहीं | | ` ... ` | कंटेनर की शुरुआत और अंत | | `` | एक्सएमएल टिप्पणी | | `replace`, `add`, `remove` | चयनित सामग्री को बदलने, जोड़ने या हटाने के लिए अंतर संचालन | | `/properties/hull/@max` | किसी विशेषता का XPath | | `[@name='example']` | XPath विशेषता फ़िल्टर | एक XML विशेषता के अंदर, भागने ampersands के रूप में `&` और कम-से-कम `<`. मुक़द्दमाXML को MD अभिव्यक्ति से पहले पार्स किया जाता है, यही कारण है कि lt/le/gt/ge सुविधाजनक तुलनाएं हैं। एक भिन्नता चयनकर्ता और एक do_if अभिव्यक्ति में अलग-अलग व्याकरण होते हैं। ## MD: एक बार में एक छोटी क्रिया | निर्माण | उद्देश्य | | --- | --- | | `set_value` | किसी मान को असाइन या अपडेट करें | | `do_if`, `do_elseif`, `do_else` | शाखा का चयन करें | | `do_for_each` | प्रक्रिया सूची तत्व | | `append_to_list` | एक तत्व जोड़ें | | `remove_value` | एक चर या रिकॉर्ड को हटाएं | | `debug_text` | निदान लिखें | | `run_actions` | उपयुक्त क्रिया पुस्तकालय चलाएँ | | `event_ui_triggered` | संकेत शर्तों में UI घटना प्राप्त करें | | `raise_lua_event` | Lua को एक घटना भेजें | ये एमडी तत्व नाम हैं, मानक एक्सएमएल फ़ंक्शन नहीं। इंजन गुणों और वैध संदर्भ को परिभाषित करता है। नीचे दिए गए क्रिया उदाहरण में अपनी सूची बनाई गई है और यह 2 के बराबर है। `operation=add exact=1` इसे बढ़ाता है; वस्तु वर्तमान तत्व को दर्शाता है। ```xml ``` ### एमडी अभिव्यक्ति | फॉर्म | अर्थ | | --- | --- | | `$Count`, `Init.$States` | एक चर, या स्पष्ट संकेत संदर्भ में एक चर | | `==`, `!=` | समान, समान नहीं | | `lt`, `le`, `gt`, `ge` | कम, कम या बराबर, बड़ा, बड़ा या बराबर | | `and`, `or`, `not` | तार्किक संचालन | | `+`, `-`, `*`, `/`, `%` | अंकगणित; प्रतिशत शेष है | | `'Name: ' + $Label` | स्ट्रिंग कॉनकेशन | | `$Value?`, `$Object.exists` | वैरिएबल/प्रपॉर्टी रिज़ॉल्यूशन बनाम ऑब्जेक्ट अस्तित्व | | `typeof $D == datatype.list` | मूल्य प्रकार परीक्षण | | `$D.{1}`, `$D.count` | प्रथम सूची तत्व और तत्वों की संख्या | | `table[]`, `[]` | खाली तालिका और खाली सूची | | `if $Ready then 'yes' else 'no'` | एक सशर्त मूल्य अभिव्यक्ति | दिखाए गए एमडी सूचियों की शुरुआत 1 से होती है। हल करने योग्य चर में झूठी बात हो सकती है; अस्तित्व और सत्य अलग हैं। देखिये [वेरिएबल का संदर्भ](wiki:md-variables), विशेष रूप से त्वरित संकेतों के साथ। ## Lua: सामान्य फ़ंक्शन पढ़ना नीचे दिए गए स्टैंडअलोन उदाहरण में X4 फ़ंक्शन का कोई उपयोग नहीं किया गया है। इसका परिणाम 8 है, यह मानकर कि प्रत्येक आइटम में संख्यात्मक मात्रा क्षेत्र है। `{}` एक तालिका बनाता है, दोनों अनुक्रमों और नामित रिकॉर्ड के लिए इस्तेमाल किया। `item.amount` साधन `item["amount"]`. (स)में `for _, item`, पहला चर सूचकांक प्राप्त करता है; अधोरेखित एक सामान्य नाम है जो पारंपरिक रूप से एक अप्रयुक्त मूल्य को चिह्नित करता है। ```lua local function total(items) if type(items) ~= "table" then return 0 end local result = 0 for _, item in ipairs(items) do result = result + item.amount end return result end local amount = total({{amount = 3}, {amount = 5}}) ``` ### Lua ऑपरेटर | फॉर्म | अर्थ | | --- | --- | | `=` | कार्य | | `==`, `~=` | समान, समान नहीं | | `<`, `<=`, `>`, `>=` | तुलनाएँ | | `and`, `or`, `not` | तार्किक संचालन | | `+`, `-`, `*`, `/`, `%` | अंकगणित | | `..` | स्ट्रिंग कॉनकेशन | | `#value` | स्ट्रिंग बाइट लंबाई या अनुक्रम सीमा | | `object.field` | तालिका क्षेत्र का उपयोग | | `object:method(x)` | समतुल्य `object.method(object, x)` | `#table` यह एक मनमानी कुंजी की गिनती नहीं है। छेद और स्ट्रिंग कुंजी घने क्रम का गठन नहीं करती हैं। स्ट्रिंग की लंबाई बाइट्स गिनती, जो UTF-8 के लिए मायने रखता है। Lua में केवल झूठी और शून्य झूठी हैं; 0 और एक खाली स्ट्रिंग सच हैं। `value or fallback` झूठी भी बदल देता है। तर्क और/या चयनित मान लौटाएं, जरूरी नहीं कि बोलियन हो। ### मानक Lua फ़ंक्शन `type` मूल्य प्रकार की रिपोर्ट करता है; `tostring` मान प्रारूप; `tonumber` रूपांतरण का प्रयास करता है और शून्य पर लौट सकता है। `ipairs` 1 से गायब वस्तु तक घने सूचकांक पर चलता है; `pairs` आदेश की कोई गारंटी नहीं है। `table.insert`, `table.remove` और `table.concat` अनुक्रमों को हेरफेर करें। `string.format` प्रारूपित पाठ का निर्माण करता है; मैच/gsub Lua पैटर्न का उपयोग करता है। `math.min` और `math.max` संख्यात्मक सीमाएँ चुनें। `pcall` Lua त्रुटियों को पकड़ता है; `require` पर्यावरण नियमों के अनुसार मॉड्यूल लोड करता है। खेल UI में हर मॉड्यूल उपलब्ध नहीं है। डिबग या फ़ाइल एक्सेस का अनुमान न लें। विफलता को चुपचाप छिपाने के बजाय पीसी कॉल फ्लैग और त्रुटि की जांच करें। एक सुरक्षित Lua कॉल एक अमान्य मूल कॉल को सुरक्षित नहीं बनाता है। नीचे Lua 5.1 और LuaJIT प्राथमिक संदर्भ देखें। ## X4 फ़ंक्शन बनाम मॉड फ़ंक्शन वस्तु आईडी को सही प्रतिनिधित्व में हल करें। एक यादृच्छिक संख्या, जहाज का नाम, नेटवर्क आईडी, UI हैंडल और यूनिवर्सआईडी परस्पर विनिमेय नहीं हैंः [पहचान की सटीकता](wiki:ids-and-precision). ## पढ़ने के दौरान पांच गलतियाँ जो आप देख सकते हैं 1. Lua का उपयोग `~=`, जबकि एमडी `!=` असमानता के लिए। 2. Lua के साथ स्ट्रिंग जोड़ता है `..`; एमडी उपयोग `+` दिखाए गए रूपों में। 3. Lua असाइनमेंट है `=`, तुलना है `==`. 4. खिड़की पाठ को बदलना दुनिया वस्तु को बदलने के लिए साबित नहीं होता है। 5. एक संचालक परिभाषा को अभी भी एक लोड फ़ाइल, एक प्राप्त घटना और सत्यापित इनपुट की आवश्यकता है। पढ़ें: [Lua ↔ MD](wiki:md-lua-bridge) और एक परीक्षण प्रोफ़ाइल में उदाहरण स्थापित करने से पहले प्रत्येक पंक्ति की व्याख्या करें।