What's new
What's new

New messages New topics Systems Serverfiles 3D Models Web Scripting

Metin2Resources

👋 Welcome to Metin2 Resources — your hub for professional Metin2 server development.

Create a free account to access advanced systems, serverfiles, tutorials and connect with other developers.

🚀 Join today and start building better.

ITJA Aviator Betting System (Expandable)

ITJA

Member
📜 Messages 18
👍 Reactions 0
🏆 Points 25
🌐 Website ugurkaya.work
istersen yang.ep.won vs vs. kafananıza göre entegre edersiniz

CMD GENERAL:

ACMD komut başlangıclarına ekle
C++:
std::deque<float> g_AviatorMultipliers;
std::deque<std::string> g_AviatorWinners;

ACMD(do_aviator_info)
{
    ch->ChatPacket(CHAT_TYPE_INFO, "Last Multipliers:");
    for (auto it = g_AviatorMultipliers.rbegin(); it != g_AviatorMultipliers.rend(); ++it)
        ch->ChatPacket(CHAT_TYPE_INFO, "  %.2fx", *it);

    ch->ChatPacket(CHAT_TYPE_INFO, "Top recent winners:");
    for (auto it = g_AviatorWinners.rbegin(); it != g_AviatorWinners.rend(); ++it)
        ch->ChatPacket(CHAT_TYPE_INFO, "  %s", it->c_str());
}

EVENTINFO(aviator_event_info)
{
    LPCHARACTER ch;
    aviator_event_info() : ch(NULL) {}
};

EVENTFUNC(aviator_event)
{
    aviator_event_info* info = dynamic_cast<aviator_event_info*>(event->info);
    if (!info || !info->ch) return 0;

    LPCHARACTER ch = info->ch;
    auto it = g_AviatorMap.find(ch->GetVID());
    if (it == g_AviatorMap.end()) return 0;

    SAviatorData& data = it->second;
    if (!data.isPlaying) return 0;

    data.multiplier += 0.05f;
    ch->ChatPacket(CHAT_TYPE_INFO, "Çarpan: %.2fx", data.multiplier);

    if (number(1, 1000) <= 30) {
        ch->ChatPacket(CHAT_TYPE_INFO, "?? Uçak %.2fx çarpanda patladı!", data.multiplier);
        data.isPlaying = false;
        g_AviatorMap.erase(it);
        return 0;
    }

    return PASSES_PER_SEC(1);
}

ACMD(do_aviator)
{
    char arg[256];
    one_argument(argument, arg, sizeof(arg));
    int bet = atoi(arg);
    if (bet <= 0) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /aviator [bahis]");
        return;
    }

    if (g_AviatorMap.find(ch->GetVID()) != g_AviatorMap.end()) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Zaten oynuyorsun.");
        return;
    }

    if (ch->GetGold() < bet) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Yeterli yang yok.");
        return;
    }

    SAviatorData data;
    data.bet = bet;
    data.multiplier = 1.0f;
    data.isPlaying = true;

    aviator_event_info* info = AllocEventInfo<aviator_event_info>();
    info->ch = ch;

    data.event = event_create(aviator_event, info, PASSES_PER_SEC(1));
    g_AviatorMap[ch->GetVID()] = data;

    ch->PointChange(POINT_GOLD, -bet);
    ch->ChatPacket(CHAT_TYPE_INFO, "?? Aviator başladı! Bahis: %d Yang", bet);
}

ACMD(do_bozdur)
{
    auto it = g_AviatorMap.find(ch->GetVID());
    if (it == g_AviatorMap.end()) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Aktif oyunun yok.");
        return;
    }

    SAviatorData& data = it->second;
    if (!data.isPlaying) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyun zaten bitmiş.");
        g_AviatorMap.erase(it);
        return;
    }

    int kazanc = (int)(data.bet * data.multiplier);
    ch->PointChange(POINT_GOLD, kazanc);
    ch->ChatPacket(CHAT_TYPE_INFO, "? %.2fx çarpanda bozdurdun. Kazanç: %d Yang", data.multiplier, kazanc);

    data.isPlaying = false;
    event_cancel(&data.event);
    g_AviatorMap.erase(it);
}

cmd.cpp

C++:
ACMD(do_aviator);
ACMD(do_bozdur);
ACMD(do_aviator_info);

cmd.cpp

C++:
    { "aviator",        do_aviator,        0,            POS_DEAD,    GM_PLAYER    },
    { "bozdur",        do_bozdur,        0,            POS_DEAD,    GM_PLAYER    },
    { "aviator_info",        do_aviator_info,        0,            POS_DEAD,    GM_PLAYER    },

PY

[CODE lang="python" title="aviator.py"]import ui
import net

class AviatorPanel(ui.BoardWithTitleBar):
def __init__(self):
ui.BoardWithTitleBar.__init__(self)
self.SetSize(380, 250)
self.SetCenterPosition()
self.AddFlag("movable")
self.AddFlag("float")
self.SetTitleName("Aviator Game")

self.inputLabel = ui.TextLine()
self.inputLabel.SetParent(self)
self.inputLabel.SetPosition(160, 40)
self.inputLabel.SetText("Bet Amount")
self.inputLabel.Show()

self.input = ui.EditLine()
self.input.SetParent(self)
self.input.SetPosition(130, 60)
self.input.SetSize(120, 20)
self.input.SetMax(7)
self.input.SetText("1000")
self.input.SetFocus()
self.input.Show()

self.startButton = ui.Button()
self.startButton.SetParent(self)
self.startButton.SetPosition(80, 100)
self.startButton.SetUpVisual("d:/ymir work/ui/public/middle_button_01.sub")
self.startButton.SetOverVisual("d:/ymir work/ui/public/middle_button_02.sub")
self.startButton.SetDownVisual("d:/ymir work/ui/public/middle_button_03.sub")
self.startButton.SetText("START")
self.startButton.SetEvent(self.OnStart)
self.startButton.Show()

self.cashOutButton = ui.Button()
self.cashOutButton.SetParent(self)
self.cashOutButton.SetPosition(200, 100)
self.cashOutButton.SetUpVisual("d:/ymir work/ui/public/middle_button_01.sub")
self.cashOutButton.SetOverVisual("d:/ymir work/ui/public/middle_button_02.sub")
self.cashOutButton.SetDownVisual("d:/ymir work/ui/public/middle_button_03.sub")
self.cashOutButton.SetText("CASH OUT")
self.cashOutButton.SetEvent(self.OnCashOut)
self.cashOutButton.Show()

# Multipliers list
self.multiTitle = ui.TextLine()
self.multiTitle.SetParent(self)
self.multiTitle.SetPosition(40, 150)
self.multiTitle.SetText("Multipliers")
self.multiTitle.Show()

self.multiLines = []
for i in range(5):
line = ui.TextLine()
line.SetParent(self)
line.SetPosition(40, 170 + i * 15)
line.SetText("-")
line.Show()
self.multiLines.append(line)

# Winners list
self.winnerTitle = ui.TextLine()
self.winnerTitle.SetParent(self)
self.winnerTitle.SetPosition(210, 150)
self.winnerTitle.SetText("Winners")
self.winnerTitle.Show()

self.winnerLines = []
for i in range(5):
line = ui.TextLine()
line.SetParent(self)
line.SetPosition(210, 170 + i * 15)
line.SetText("-")
line.Show()
self.winnerLines.append(line)

# Bilgi çekmek için komutu tetikle
net.SendChatPacket("/aviator_info")

def OnStart(self):
bet = self.input.GetText()
if bet.isdigit():
net.SendChatPacket("/aviator " + bet)
self.input.SetText("")

def OnCashOut(self):
net.SendChatPacket("/bozdur")

def UpdateHistory(self, multiplierList, winnerList):
for i in range(5):
self.multiLines.SetText(multiplierList if i < len(multiplierList) else "-")
self.winnerLines.SetText(winnerList if i < len(winnerList) else "-")

dlg = None
def Open():
global dlg
if dlg:
dlg.Show()
else:
dlg = AviatorPanel()
dlg.Show()

def UpdatePanelInfo(multis, winners):
if dlg and dlg.IsShow():
dlg.UpdateHistory(multis, winners)[/CODE]

game.py Dosyasını Aç
Python:
import aviator

onPressKeyDict taraflarına ekle

Python:
        onPressKeyDict[app.DIK_F10] = lambda: aviator.Open()

interfaceModule.py

Python:
import aviator

2. class Interface içinde, def __init__(self): fonksiyonunu bul

Python:
self.aviatorButton = ui.Button()
self.aviatorButton.SetParent(self)
self.aviatorButton.SetPosition(600, 340)  # ekran pozisyonu, istersen değiştir
self.aviatorButton.SetUpVisual("d:/ymir work/ui/public/middle_button_01.sub")
self.aviatorButton.SetOverVisual("d:/ymir work/ui/public/middle_button_02.sub")
self.aviatorButton.SetDownVisual("d:/ymir work/ui/public/middle_button_03.sub")
self.aviatorButton.SetText("AVIATOR")
self.aviatorButton.SetEvent(aviator.Open)
self.aviatorButton.Show()




[KANIT]
 
Back
Top Bottom