[C++] Balıkçılık Eventi

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 44

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
  • <li data-xf-list-type="ul">Char.cpp dosyasına şu fonksiyonu ekleyin veya düzenleyin:
Kod:
void CHARACTER::FishingEvent(const TItemPos&amp; pos, DWORD dwVnum) {     at_fishing_event(this, pos, dwVnum); }

  • <li data-xf-list-type="ul">char.h dosyasında CHARACTER sınıfının altına şu fonksiyon bildirimini ekleyin.
Kod:
void FishingEvent(const TItemPos&amp; pos, DWORD dwVnum);
  • <li data-xf-list-type="ul">cmd.cpp dosyasına şu fonksiyonu ekleyin veya düzenleyin:
Kod:
ACMD(do_fishing_event);
  • <li data-xf-list-type="ul">cmd.cpp ACMD_TABLE ALTINA :
Kod:
{ "fishing_event",        do_fishing_event,        0,            0        },

  • <li data-xf-list-type="ul">questlua.cpp dosyasına şu satırları ekleyin:
Kod:
#include "questlu[HASH=2388]#include[/HASH]clude "char.h"[HASH=2388]#include[/HASH]uest_fishing_event) {     LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();     if (ch)         ch-&gt;FishingEvent(TItemPos(INVENTORY, 0), 0); // Item düşürecek bir balık vnum'u belirtilebilir.     return 0; } ALUA(unbind_fishing_event) {     stop_fishing_event();     return 0; }

  • <li data-xf-list-type="ul">cmd_general.cpp dosyasına şu satırı ekleyin:
Kod:
ACMD(do_fishing_event) {     if (is_gm(ch))         ch-&gt;ChatPacket(CHAT_TYPE_COMMAND, "quest fishing_event"); }

  • <li data-xf-list-type="ul">cmd_gm.cpp dosyasına şu satırı ekleyin:
Kod:
{ "fishing_event",        do_fishing_event,        0, POS_DEAD, GM_IMPLEMENTOR },


Bu eventi başlatmak için şöyle bir quest tetiklemesi kullanılabilir.
Kod:
quest fishing_event begin     state start begin         when login with is_gm() begin             cmdchat("start_fishing_event")             say("Balık eventi başladı! Sadece belirli itemler düşecek.")             notice_all("Balık eventi başladı! Sadece belirli itemler düşecek.")         end         when login with not is_gm() begin             say("Sadece GM hesapları balık eventini başlatabilir.")         end     end     state stop begin         when login with is_gm() begin             cmdchat("stop_fishing_event")             say("Balık eventi sona erdi. Artık normal itemler düşecek.")             notice_all("Balık eventi sona erdi. Artık normal itemler düşecek.")         end         when login with not is_gm() begin             say("Sadece GM hesapları balık eventini sonlandırabilir.")         end     end end function start_fishing_event()     fishing_event.set_state("start")     fishing_event.set_timer(3600) -- 1 saat boyunca devam eder     fishing_event.start() end function stop_fishing_event()     fishing_event.set_state("stop")     fishing_event.stop() end function at_fishing(fish_vnum)     local state = fishing_event.get_state()     if state == "start" then -- Eğer balık eventi aktifse, sadece belirli itemler düşecek.         if fish_vnum == 1001 or fish_vnum == 1002 or fish_vnum == 1003 then -- Sadece belirli itemlerin vnum'larına izin veriyoruz.             game.drop_item(fish_vnum, 1, 1) -- Düşürülecek itemlerin adetini ve düşürülecek yerin numarasını buradan ayarlayabilirsiniz.         end     end end

Metin2'de C++ ile Balıkçılık Eventi Oluşturmak

Metin2 özel sunucularında oyun içi etkinliklerden biri olan Balıkçılık Eventi, oyuncuların eğlenceli vakit geçirmesini ve sunucuya bağlılığını artırmayı hedefler. Bu etkinlik, C++ programlama dili kullanılarak sunucu tarafında geliştirilebilir ve oyun içi deneyimi zenginleştirir. Bu makalede, Metin2 özel sunucularında C++ tabanlı Balıkçılık Eventi nasıl yapılır, hangi adımlar izlenmelidir ve neler dikkate alınmalıdır konusuna değineceğiz.

Balıkçılık Eventi Nedir?

Balıkçılık eventi, oyuncuların belirli bir süre boyunca harita üzerinde özel balıkçılık alanlarında balık tutarak ödüller kazanabildiği bir etkinliktir. Bu etkinlik genellikle belirli zaman aralıklarında aktif edilir ve oyunculara özel ödüller sunar. Event, hem sosyal hem de rekabetçi yönüyle oyuncuları oyunda tutar.

C++ ile Balıkçılık Eventi Geliştirme

C++ tabanlı Metin2 sunucularında bu eventi geliştirmek için öncelikle oyun sunucusunun kaynak kodlarına erişim gereklidir. Sunucu tarafında event sistemi mevcut olup olmadığı kontrol edilmelidir. Eğer mevcutsa, balıkçılık eventi bu sisteme entegre edilir. Aksi takdirde event sistemi oluşturulmalıdır.

Gerekli Adımlar:

- Event Komutu Tanımı: Sunucuda /balık veya /fishing gibi bir komut tanımlanarak event başlatılabilir. Bu komut, sunucu konsoluna girilen komutlara göre çalışır.
- Balıkçılık Mekaniği: Balık tutma animasyonları, bekleme süreleri, şans sistemleri C++ ile yazılır. Bu mekanik, client ile senkronize çalışmalıdır.
- Ödül Sistemi: Balık tutan oyunculara rastgele ödüller verilir. Bu ödüller DB (veritabanı) üzerinden yönetilir.
- Zamanlayıcı: Eventin ne kadar süreceği ve ne sıklıkla tekrarlanacağı C++ ile tanımlanır.

Balıkçılık Eventinin DB Entegrasyonu

Balıkçılık eventi sırasında elde edilen ödüller DB üzerinden kayıt altına alınır. Bu sayede sunucu yöneticileri istatistiksel analiz yapabilir, ödüllerin dengeli dağıldığını görebilir. DB-Core entegrasyonu önemlidir çünkü her balık yakalama işlemi DB’ye yazılmalı ve güvenlik açısından loglanmalıdır.

Olası Güvenlik Açıkları

C++ ile geliştirilen eventlerde, özellikle komut tabanlı sistemlerde hack veya exploit girişimleri olabilir. Bu yüzden tüm event işlemleri güvenlik kontrollerinden geçirilmelidir. Örneğin, balıkçılık sırasında item çoğaltma (duplication) gibi sorunlar yaşanmamalıdır.

Sunucu Tarafı Kod Yapısı

Event başlatıldığında, sunucu taraflı olarak belirli NPC'lerin veya objelerin aktif olması gerekir. Bu objeler C++ ile spawn edilir ve event süresince aktif kalır. Event bitiminde ise bu objeler silinir. Bu işlemler için timer ve event loop yapıları kullanılır.

Client Tarafı Entegrasyonu

Balıkçılık eventi sırasında client tarafında özel efektler, sesler, UI değişiklikleri olabilir. Bu durumda client src dosyalarında da değişiklik yapılması gerekir. Uiscript ile UI tarafı düzenlenirken, py root dosyaları ile event komutları senkronize edilir.

Sonuç

C++ ile geliştirilen Balıkçılık Eventi, Metin2 özel sunucularında oyuncuların daha fazla zaman harcamasını sağlar. Doğru uygulandığında hem eğlence hem de gelir kaynakları açısından faydalıdır. Bu eventi başarılı bir şekilde uygulamak için hem sunucu hem de client tarafında çalışmak gerekir. Metin2Lobby üzerinden daha fazla C++ tabanlı event örneği ve kaynak kodları inceleyebilirsiniz.


Creating a Fishing Event with C++ in Metin2

The Fishing Event is one of the in-game activities that aims to entertain players and increase their loyalty in Metin2 private servers. This event can be developed on the server-side using the C++ programming language and enriches the in-game experience. In this article, we will cover how to create a C++ based Fishing Event in Metin2 private servers, what steps should be followed, and what considerations should be taken into account.

What is a Fishing Event?

The fishing event allows players to catch fish in special fishing zones on the map for a certain duration and win rewards. Usually activated at specific intervals, this event offers exclusive rewards to players. With both social and competitive aspects, it keeps players engaged in the game.

Developing a Fishing Event with C++

To develop this event in C++-based Metin2 servers, access to the game server's source code is required. First, you must check whether the event system already exists on the server. If so, the fishing event can be integrated into this system. Otherwise, an event system needs to be created.

Required Steps:

- Event Command Definition: A command like /fishing or /fish can be defined on the server to start the event. This command operates based on commands entered into the server console.
- Fishing Mechanics: The mechanics such as fishing animations, waiting times, and chance systems are written in C++. This mechanism must be synchronized with the client.
- Reward System: Players catching fish receive random rewards. These rewards are managed via the database (DB).
- Timer: How long the event lasts and how often it repeats is defined in C++.

Database Integration of the Fishing Event

Rewards obtained during the fishing event are recorded in the database. This allows server administrators to perform statistical analysis and ensure balanced distribution of rewards. Database integration is crucial because each fish catch should be logged securely in the DB.

Potential Security Vulnerabilities

In events developed with C++, especially those command-based, there may be attempts at hacking or exploiting. Therefore, all event operations should pass through security checks. For instance, item duplication during fishing must be prevented.

Server-Side Code Structure

When the event starts, specific NPCs or objects need to appear on the server side. These objects are spawned in C++ and remain active throughout the event. Upon the event’s end, these objects are removed. Timer and event loop structures are used for these operations.

Client-Side Integration

During the fishing event, special effects, sounds, or UI changes might occur on the client side. In this case, modifications may be needed in the client source files. UI adjustments are made with uiscript, while event commands are synchronized via py root files.

Conclusion

A Fishing Event developed with C++ encourages players to spend more time in Metin2 private servers. When properly implemented, it serves both entertainment and revenue purposes. To successfully implement this event, work is required on both server and client sides. You can review more C++-based event examples and source codes at Metin2Lobby.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt