इस धोखा पत्र का उपयोग कैसे करें#

पहले भाषा की पहचान करें। XPath, MD और Lua अलग-अलग तरह से समान इरादे व्यक्त करते हैं। यह एक चयन है जो इन उदाहरणों और परियोजना कोड को पढ़ने के लिए उपयोगी है, न कि सांख्यिकीय रैंकिंग या पूर्ण भाषा संदर्भ। शुरू करें X4 कोड कैसे काम करता है यदि शर्तें अपरिचित हैं। नए स्निपेट सीख रहे हैं उदाहरण, नहीं दावा किया जा रहा है खेल में परीक्षण.

चार मूलभूत अवधारणाएँ#

एक चर एक मूल्य को संग्रहीत करता है। एक स्थिति चुनती है कि क्या कुछ करना है। एक फ़ंक्शन तर्क प्राप्त करता है और काम करता है, कभी-कभी परिणाम लौटाता है। एक घटना संचालक एक समारोह या MD नोड है जो किसी विशेष घटना के लिए चलाया जाता है। परिभाषित करना getName, बुला रहा है getName() और उसके लौटाए गए मूल्य को संग्रहीत करना।

एक्सएमएल तत्व, विशेषताएं और चयनकर्ता#

फॉर्म अर्थ
<hull max="1800" /> एक विशेषता वाला तत्व और कोई बाल सामग्री नहीं
<actions> ... </actions> कंटेनर की शुरुआत और अंत
<!-- comment --> एक्सएमएल टिप्पणी
replace, add, remove चयनित सामग्री को बदलने, जोड़ने या हटाने के लिए अंतर संचालन
/properties/hull/@max किसी विशेषता का XPath
[@name='example'] XPath विशेषता फ़िल्टर

एक XML विशेषता के अंदर, भागने ampersands के रूप में &amp; और कम-से-कम &lt;. मुक़द्दमा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
<set_value name="$Items" exact="['Корпус', 'Двигатель']" />
<set_value name="$Count" exact="0" />
<do_for_each name="$Item" in="$Items">
  <set_value name="$Count" operation="add" exact="1" />
</do_for_each>
<do_if value="$Count == 2">
  <debug_text text="'Обработано два элемента'" />
</do_if>

एमडी अभिव्यक्ति#

फॉर्म अर्थ
$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 से होती है। हल करने योग्य चर में झूठी बात हो सकती है; अस्तित्व और सत्य अलग हैं। देखिये वेरिएबल का संदर्भ, विशेष रूप से त्वरित संकेतों के साथ।

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 हैंडल और यूनिवर्सआईडी परस्पर विनिमेय नहीं हैंः पहचान की सटीकता.

पढ़ने के दौरान पांच गलतियाँ जो आप देख सकते हैं#

  1. Lua का उपयोग ~=, जबकि एमडी != असमानता के लिए।
  2. Lua के साथ स्ट्रिंग जोड़ता है ..; एमडी उपयोग + दिखाए गए रूपों में।
  3. Lua असाइनमेंट है =, तुलना है ==.
  4. खिड़की पाठ को बदलना दुनिया वस्तु को बदलने के लिए साबित नहीं होता है।
  5. एक संचालक परिभाषा को अभी भी एक लोड फ़ाइल, एक प्राप्त घटना और सत्यापित इनपुट की आवश्यकता है।

पढ़ें: Lua ↔ MD और एक परीक्षण प्रोफ़ाइल में उदाहरण स्थापित करने से पहले प्रत्येक पंक्ति की व्याख्या करें।