PlayerPoints | Плагин на реализацию второй валюты! » — Хочешь создать сервер Майнкрафт? Заходи, для тебя здесь уже всё готово ❤ Сливы приватных ресурсов для сервера Майнкрафт

Описание плагина playerpoints:

PlayerPoints – это денежная система, основанная на очках. Зарабатывать дон будет возможно для вас. Веб-магазин вашего сервера. DeLuxe Munus – это определенный плагин, используемый в AniamtedMenuPlus. Помимо возможности зарабатывать PlayerPoints путем голосования и использовать их для покупки призов, PlayerPoints являются валютой высокого класса.

Описание плагина coins:

Самый многофункциональный и эффективный плагин для управления вторичной экономикой на любом сервере называется Coins.

Вторую валюту можно использовать для чего угодно, включая аукционы и биржи.

Давайте сейчас рассмотрим команды и заполнители.

Start-minecraft

Параметры:

Vanilla или TypeForge. запускает сервер с помощью Server. Jar, выбирает из папки последнюю версию и ищет папку последней версии.

MinecraftPath указывает местоположение папки установки сервера.

– LogFileДополнительный метод сбора журналов. Задает расположение файла, в который будет записываться содержимое консоли.

Запускает прием платежей с помощью -StartPaymentListener. Вы можете получить доступ к информации о приеме платежей через другой модуль. Модуль команды запуска был заменен командлетом Start-Weblistener.

Start-weblistener


Запускает модуль приема платежей.

Папка, содержащая файл конфигурации, обозначается MinecraftPathIn.

Делаем конфиг файл

Вам нужно создать стандартный файл конфигурации, чтобы вы могли использовать все это, не запутавшись. Переменные будут единственными в этом файле. как отправить файл конфигурации по электронной почте

Import-Module $MinecraftPathconfig.ps1 -Force

Необходимо определить наиболее важный аспект. Обычный домен и прослушиваемый домен (который проверяет пароль rcon), потому что вы можете изменить тот или иной.

Это выглядит следующим образом:

#Домен, который мы будем слушать
$DomainName = "localhost"
 
#регулярное выражение, которое фиксирует вход игрока в игру
#не изменяйте, если работает
$RegExp = "of player ([^ ] )"
#После успешного нахождения по паттерну, нужно отрезать все, кроме ника.
$RegExpCut = "of player "
 
#Пароль от rcon, который был задан в server.properties
$rconPassword = "123"

Поскольку скрипт ищет его там, предпочтительнее поместить конфигурацию в папку сервера -MinecraftPath

Делаем обработку платежей

Регулярка, о которой мы говорили ранее, сделает вызов обработчика. Игрок получает ник, и все. Если файла нет, скрипт просматривает архив и выдает игроку предмет, если он там есть.

powershell.exe -file "C:mc.fernStart-MinecraftHandler.ps1" -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append | ForEach-Object {
       
        #Так как строка оказалась в конвейере,нам придется её писать таким вот образом.
        Write-host $_   
 
        #Класс Regex сам оповестит нас о срабатывании
        if ($true -eq $Regex.Matches($_).Success) {
            
            #Удаляем все лишне и оставляем только ник игрока
            $Player = $Regex.Matches($_).value -replace "of player "
            
            #Вызываем самописную команду, которая найдет платеж и передаст игроку предмет
            Complete-Payment -Player $Player
        }
    }


При срабатывании регулярки запускается модуль, который завершает платеж, то есть, отдает игроку предмет. Для этого в папке /Payments/Pending/ скрипт ищет файлы содержащие ник игрока зашедшего в игру и читает его содержание.

Следующим шагом будет создание и отправка команды на сервер. Она будет взята из файла. Имя игрока, его ID и никнейм записываются. Для этого будет использоваться MCRCON.

#Находим файл содержащий ник игрока
    $JsonPath = Join-Path $MinecraftPathpaymentsPending -ChildPath $Player*
    $i = $JsonPath | Get-Item | Where-Object { !$_.PSIsContainer } | Get-Content | ConvertFrom-Json -ErrorVariable Errored
 
    #Если файл был найден выполняем процедуру зачисления
    if ($null -ne $i) {
 
        #Составляем команду 
        $Command = '"'   "give "   $i.Player   " "   $i.Item   " "   $i.Quantity   '"'
        Write-host $Command -ForegroundColor Green
    
        #Отправляем команду на сервер
        Start-Process -FilePath mcrcon.exe -ArgumentList "-H localhost -p 123 -w 5 $Command"
    
        #Составляем путь, по которому наш объект будет экспортирован
        $JsonPath = Join-Path $MinecraftPathpaymentsPending -ChildPath $FileName
        
        #Экспортируем объект в джисонину
        $i | ConvertTo-Json | Out-File $JsonPath
    
        #Перемещаем завершенный платеж в другую папку
        Move-Item  -Path $JsonPath -Destination $MinecraftPathpaymentsCompleted
    }

Делаем прием платежей

Поскольку мы имеем дело с числами с двумя нулями, мы бы предпочли иметь хотя бы полный список операций перед обработкой платежей.

Автор не собирается моделировать новую базу, чтобы сохранить все как можно более простым. Давайте подумаем о стратегии NoSel. Назовите класс, который мы создадим для импорта всех платежей в JSON-файлы.

    class Payment {
        #Дата прихода платежа.
        [datetime]$Date = [datetime]::ParseExact($i.payment_date, "HH:mm:ss MMM dd, yyyy PDT", [System.Globalization.CultureInfo]::InvariantCulture)
        #Приорбетенная вещь
        [string]$Item = $i.item_name
        #Количество вещей
        [UInt16]$Quantity = $i.Quantity
        #Какую сумму мы действительно получили
        [UInt16]$AmountPaid = $AmountPaid -as [UInt16]
        #В какой валюте был принят платеж
        [string]$Currency = $i.mc_currency
        #Никнейм игрока, который получит вещь
        [string]$Player = $i.option_selection1
    
        [bool]$Completed = $false
        [UInt16]$ItemId = $i.item_number
    }
/source>

Из предложенной модели будет понятно, кто, когда, что и в каком объеме купил и получил ли товар.

Для кнопки, которую сгенерировал автор <b>option_selection1</b> – это никнейм игрока. Сюда можно подставить любой собственный input, все что угодно, но в данном случае никнейм.
Свои собственные поля имеют нумерацию <b>option_selection1</b>,<b>option_selection2</b> и так далее.

Как ранее было показано на схеме выше, ресивер не делает ничего иного, как складывает пришедшие платежи в файл.

<source lang="powershell"> #Создаем новый объект по классу Payment, чтобы его легко можно было запихнуть в файл.
    $Payment = [Payment]::new()
    $Payment | Format-Table
    #Человекопонятно обзываем файл, в формате ЧЧ-ММ-ДД-ММ-ГГГГ
    $FileName = $Payment.Player   "-"   $Payment.date.Hour   "-"   $Payment.date.Minute   "-"   $Payment.date.Day   "-"   $Payment.date.Month   "-"   $Payment.date.Year   ".json"
 
#Составляем путь, по которому наш объект будет экспортирован
    $JsonPath = Join-Path $MinecraftPath paymentsPending $FileName
    
    #Экспортируем объект в джисонину
    $Payment | ConvertTo-Json | Out-File $JsonPath

Все, что нужно сделать нашему слушателю, это. Получить данные от PayPal и записать их в файл.

Делаем самые настоящие колбеки

Мы будем создавать настоящие колбеки без использования плагинов. Это было добавлено в Start-Minecraft. Теперь он может сохранять StdOut в файл и использовать регулярку для просмотра каждой строки. Когда игрок заходит на сервер, Благо Майнкрафт оставляет для него очень специфическое сообщение.

[04:20:00 INFO]: UUID of player XXPROHUNTERXX is 23e93d2e-r34d-7h15 -5h17-a9192cd70b48

Вы можете извлечь псевдоним из строки. Код, необходимый для извлечения данных из строк Stdout, приведен здесь.

$Regex = [Regex]::new("of player ([^ ] )")
 
powershell.exe -file ".Start-MinecraftHandler.ps1" -type $type -MinecraftPath $MinecraftPath | Tee-Object $LogFile -Append | ForEach-Object {
 
     Write-host $_
        
    $Player = $Regex.Matches($_).value -replace "of player "
        
    if ($true -eq $Regex.Matches($_).Success) {
        #обратный вызов стартует тут
    }
}

Свежая строка постоянно подается в конвейер $_, записывается в окно консоли и передается. При ее нажатии обычная кнопка сама выдает предупреждение.

Здесь может быть вызван любой код. Например, мы можем поприветствовать игрока в PM и запретить ему спаривание с помощью RCON.

Как всем этим пользоваться?

Во-вторых, они были созданы и подготовлены к работе на рынке.

Вот ссылка на все файлы, если вы еще не являетесь клиентом или изображением.

Приступайте и совершайте.

Команды для админов:

/coins give ик> ол-во> (true) – Дать другому игроку заранее определенное количество монет, если в конце написать true, то они будут отданы ему в соответствии с его количеством монет.

/coins take <Ник> <Кол-во> — Заберите коины у другого игрока.

/coins set ик> ол-во> – Изменить заранее определенное количество монет для другого игрока.

Монеты Ника будут сброшены с помощью команды “/coins reset” до количества по умолчанию в конфигурации.

.

/coins about – Просмотр подробной информации о конфигурациях, версиях и т.д.

Добавить в другой плагин.

Вход в /coins importdb

Что означает команда для множителей монет?

Команды плагина coins:команды для игроков:

– Получите доступ к списку каждой команды.

Сколько у вас монет?

/coins <Ник> — Посмотреть количество коинов у другого игрока

/coins pay ик> ол-во> – перевод монет другого игрока из его собственной валюты

Посмотрите на 10 лучших игроков по количеству монет.

Открыть меню множителей коинов

Нюансы minecraft

Вы можете зачислить их теперь, когда мы разобрались с тем, как получать уведомления о платежах. Однако не все так просто. Проблема в том, что игра не может разрешить передачу предметов или изменение статуса игрока на сервере. То есть мы должны дождаться, пока пользователь войдет на сервер, прежде чем мы сможем увидеть, за что он заплатил.

Обзор курильщиков для зачисления платежей представлен на этой странице.

Для добавления объекта в файл в личном кабинете Listener, описанном выше, достаточно одной строки. При сопоставлении псевдонима с именем файла обработчик смотрит на псевдоним. Если да, он создает команду для rcon и запускает ее.

Start-Minecraft, о котором автор ранее писал статью, претерпел изменения. Затем он изучает ники игроков и передает их обработчику платежей после прослушивания вывода.

Особенности плагина playerpoints:

  • Полная поддержка SQLite и MySQL.
  • Возможность экспорта данных.
  • Распределите очки между игроками.
  • Получать очки от игроков.
  • Отправляйте платежи другим игрокам.
  • Просмотр количества очков, набранных вами и другими игроками.
  • Просмотрите таблицу лидеров, показывающую, у кого больше всего очков.
  • Дополнительная опора для хранения.
  • Права для каждой команды.
  • Используйте свои баллы для покупок в магазине.

Оформляем это все в удобный модуль


Для процесса Java и процесса WebListener требуются разные потоки, но автора не устраивает нужда запускать отдельно WebListener и отдельно сервер. Автор хочет все и сразу одной командой.

Итак, выполним оба варианта с помощью Powershell 7:

ForEach-Object -Parallel {}

Мы предоставляем простой массив команде, которая использует inputObject, и используем переключатель для разделения потоков.

"A", "B" | ForEach-Object -Parallel {
 
    Import-Module ".Start-Minecraft.ps1"
 
    Import-Module ".Start-WebListener.ps1"
 
    switch ($_) {
        "A" {
            Start-WebListener -Path "C:mc"
        }
        "B" {
            Start-Minecraft -Type Vanilla -LogFile ".stdout.txt" -MinecraftPath "C:mc"
        }
        
    }
}


Таким вот костыльным образом мы запустили два разных процесса из одного терминала и даже не потеряли инпут. Но тут появилась еще одна проблема. WebListener лочит за собой консоль после штатной остановки сервера и никуда не хочет уходить.

Чтобы не перезапускать терминал каждый раз, в Start-MinecraftHandler.ps1 и в Start-WebListener.ps1 был добавлен рандомный ключ, который будет останавливать сервер по POST на WebListener.

Когда он отмечает, что команда была успешно выполнена:

Invoke-WebRequest -Method Post -Uri localhost -Body $StopToken | Out-Null

И сценарий запуска, и Слушатель заранее получают случайное число, которое содержится в $StopToken. Если что-то в запросе напоминает $StopToken, Слушатель рассматривает это и прекращает прослушивание.

Плэйсхолдеры плагина coins:

%coins_amount%

%coins_amount_formatted%

%coins-multipliers_amount_<server>%

%coins-multipliers_enabler_<server>%

%coins-multipliers_time_<server>%

Внимание! Vault и PlaceholderAPI необходимы для работы плагина.

Для работы плагина требуется Java 8.

Плэйсхолдеры плагина playerpoints:

В ProperPoints существует два способа использования PlaceholderAPI. Использование перечисленных ниже пользовательских заполнителей – это первый вариант. В любом сообщении PlayerPoints вы можете использовать любой плейсхолдер, что является второй возможностью. Вы можете редактировать эти сообщения в своем локальном файле.

%playerpoints_points% – Общее количество очков игрока (например, 1337).

%playerpoints_formatted% – Количество очков у игрока с разделителями чисел (например, 1:37).

Права и команды плагина playerpoints:

КомандыОписаниеПрава
/pointsПоказывает текущую версию плагина и автора плагина
/points helpОтображает список команд плагина.
/points reloadПерезагружает все файлы плагина и применяет к ним все сохраненные изменения.playerpoints.reload
/points pay <name> <amount>Переводит указанное количество очков с вашего баланса другому игроку.playerpoints.pay
/points give <name> <amount>Дает игроку указанное количество очков.playerpoints.give
/points giveall <amount>Дает очки всем онлайн-игрокам.playerpoints.giveall
/points take <name> <amount>Отнять очки у игрока.playerpoints.take
/points set <name> <amount>Установить количество очков игрока на указанную сумму.playerpoints.set
/points reset <name>Сбрасывает очки игрока на 0.playerpoints.reset
/points look <name>Просмотр количества очков игрока.playerpoints.look
/points meПросмотр количества набранных очков.playerpoints.me
/points lead [next/prev/#]Просмотр страницы таблицы лидеров по очкам.playerpoints.lead
/points broadcast <name>Транслирует очки игрока.playerpoints.broadcast
/points exportЭкспортирует данные о баллах в файл storage.yml.playerpoints.export
/points importИмпортирует данные баллов из файла storage.yml.playerpoints.import

Принимаем запрос


С помощью

Что такое тестовый POST-запрос? Однако вы не можете добавлять собственные поля, поэтому автор советует создать кнопку и совершить немедленную покупку. Будет типичный запрос с кнопкой, который вы используете в IPN History. За один рубль автор купил для себя один уголь.

С помощью цикла While мы получим его. Мы можем читать входящий поток данных во время работы веб-сервера.

Вывод:

Это такое чудо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *