CounterStrikeSharp में गेम इवेंट पर प्रतिक्रिया देना
गेम इवेंट वे संदेश हैं जो गेम तब भेजता है जब कुछ होता है: कोई खिलाड़ी मरता है, राउंड शुरू होता है, बम लगाया जाता है। ज़्यादातर दिलचस्प प्लगइन इन्हीं से बनते हैं। CounterStrikeSharp में किसी इवेंट की सदस्यता लेने में बस कुछ पंक्तियाँ लगती हैं।
इवेंट क्या है
हर इवेंट की अपनी क्लास होती है, जिसका नाम Event से शुरू होता है, जैसे EventPlayerDeath या EventRoundStart, और वह बताती है कि क्या हुआ, मसलन कौन मरा और किसने मारा। आपके प्लगइन को एक मेथड मिलती है जो इवेंट होने पर हर बार बुलाई जाती है।
एट्रिब्यूट से सदस्यता लें
सबसे आसान तरीक़ा किसी मेथड पर GameEventHandler एट्रिब्यूट लगाना है। मेथड को इवेंट मिलता है और वह HookResult लौटाती है। इवेंट का डेटा सीधे इवेंट ऑब्जेक्ट से पढ़ा जाता है।
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using Microsoft.Extensions.Logging;
public class EventsPlugin : BasePlugin
{
public override string ModuleName => "Events Example";
public override string ModuleVersion => "1.0.0";
[GameEventHandler] public HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info) {
Logger.LogInformation("{Name} died", @event.Userid?.PlayerName);
return HookResult.Continue;
}
}
कोड से सदस्यता लें
आप हैंडलर को Load मेथड में RegisterEventHandler से भी रजिस्टर कर सकते हैं। यह वही काम करता है, और तब बेहतर है जब आप सिर्फ़ कुछ शर्तों पर सदस्यता लेना चाहें, जैसे कॉन्फ़िग के हिसाब से।
public override void Load(bool hotReload)
{
RegisterEventHandler<EventRoundStart>((@event, info) =>
{
Logger.LogInformation("Round started");
return HookResult.Continue;
});
}
Pre और Post
डिफ़ॉल्ट रूप से आपका हैंडलर तब चलता है जब गेम इवेंट प्रोसेस कर चुका होता है (Post)। HookMode.Pre के साथ वह उससे पहले चलता है, जिससे आप जो होने वाला है उसे बदल सकते हैं, जैसे DontBroadcast से डिफ़ॉल्ट संदेश छुपाना। जब तक दख़ल देना सच में ज़रूरी न हो, Post इस्तेमाल करें।
[GameEventHandler(HookMode.Pre)]
public HookResult OnPlayerDeathPre(EventPlayerDeath @event, GameEventInfo info)
{
if ([email protected])
{
info.DontBroadcast = true;
}
return HookResult.Continue;
}
खिलाड़ी null हो सकते हैं
Userid जैसी प्रॉपर्टी ख़ाली हो सकती हैं, जैसे जब खिलाड़ी ठीक इवेंट के पल पर बाहर चला गया हो या मारने वाला ख़ुद दुनिया (world) हो। इस्तेमाल से पहले हमेशा null जाँचें, वरना एक बदक़िस्मत पल राउंड के बीच exception खड़ा कर देता है।
HookResult का मतलब
Continue गेम को सामान्य रूप से चलने देता है और ज़्यादातर मामलों में यही सही जवाब है। Handled गेम को बताता है कि आपने इसे संभाल लिया, और Stop बाक़ी हैंडलरों को चलने से रोकता है। कोई ख़ास वजह न हो तो Continue लौटाएँ।
अच्छी आदतें
हैंडलर गेम के मुख्य थ्रेड पर चलते हैं, इसलिए उन्हें तेज़ रखें और उनके अंदर कभी डेटाबेस या वेब अनुरोध का इंतज़ार न करें। प्लगइन अनलोड होने पर सदस्यता हटाने की ज़रूरत नहीं, CounterStrikeSharp आपके लिए हैंडलर हटा देता है। इवेंट की सूची और उनके फ़ील्ड के लिए गेम इवेंट दस्तावेज़ देखें।
क्या यह ट्यूटोरियल उपयोगी था?
Barlap समुदाय के लिए।