NoKillFarming - Запрети игрокам фармить убийства!

NoKillFarming - Запрети игрокам фармить убийства! 1.0

Нет прав для скачивания

Vinni

Разработчик
Пользователь
Сообщения
85
Решения
1
Vinni добавил(а) новый ресурс:

You must be logged in to see this link. - Плагин на предотвращение фарма убийств, например, для попадания в топ.

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

Как скачать?

1 Скачать плагин
2 Закинуть в plugins
3 Запустить сервер


Что плагин проверяет и как?
1 Проверяет на одинаковый айпи.
2 Проверяет на быстроту, если игрок убит этим-же игроком в срок менее 10 секунд.
3 Проверяет на число убийств, нельзя убить одного и того же игрока более 20 раз.

You must be logged in to see this link.
 
Вам необходимо зарегистрироваться для просмотра изображений-вложений


кек
Своровали, хотя меня там вообще забанили((
Объединено

Мне кажется, нужно было юзать PlayerDeathEvent
Я бы с радостью, но там нельзя убийцу получить ;)
 
Своровали, хотя меня там вообще забанили((
Объединено


Я бы с радостью, но там нельзя убийцу получить ;)
ну так ты отнимаешь одно убийство при каждом ударе, а не убийце, убил 10 человек, ударил твинк 10 раз - 0 киллов
а ещё может быть несовместимо с плагинами на достижения, например, у тебя 99 убийств, убил твинк, у тебя всё так же 99 убийств, но квест "убить 100 человек" пройден
можно юзать player.getLastDamageCause(), ну или в котлине - player?.lastDamageCause
 
ну так ты отнимаешь одно убийство при каждом ударе, а не убийце, убил 10 человек, ударил твинк 10 раз - 0 киллов
а ещё может быть несовместимо с плагинами на достижения, например, у тебя 99 убийств, убил твинк, у тебя всё так же 99 убийств, но квест "убить 100 человек" пройден
можно юзать player.getLastDamageCause(), ну или в котлине - player?.lastDamageCause
Только при убийстве
Код:
if(maxHealth > event.finalDamage) return
, и к сожалению, по другому никак, поставь я приоритет ниже - плагины отменяющие финальный удар (некие сейверы или тотемы), будут мешать, и при "сейве", убийство отнимется, если плагин так посчитает.

На счет damageCause, я могу проверить что причина = Entity_ATTACK, но как получить дамагера?
 
if(maxHealth > event.finalDamage) return
А, извиняюсь, спать хотелось тогда
, и к сожалению, по другому никак, поставь я приоритет ниже - плагины отменяющие финальный удар (некие сейверы или тотемы), будут мешать, и при "сейве", убийство отнимется, если плагин так посчитает.
Разве при player.lastDamageCause будет такой баг?
 
offtop
Мне кажется что надо было не писать на котлине
Котлин замечательный язык и исправляет многие неисправимые проблемы жавы. В основном связанные с синтаксисом. Душа радуется, когда вижу, что кто-то пишет на нём плагины
 
Котлин замечательный язык и исправляет многие неисправимые проблемы жавы. В основном связанные с синтаксисом. Душа радуется, когда вижу, что кто-то пишет на нём плагины
offtop Как вообще можно на нем что-то писать, ну ничерта же не понятно!
 
Как вообще можно на нем что-то писать, ну ничерта же не понятно!
offtop Его синтаксис это нечто. Мне тоже первое время было немного непонятно, все эти ?, ?: и прочее выглядит странно. Но если провести пару часов за чтением доков (kotlinlang.org), при этом, умея работать с жавой, котлин вызывает только восхищение
Java:
@Route(name = "builds")
class MyCommandCommand @Inject constructor(
    private val miniMessage: MiniMessage,
    private val townyService: TownyService,
    private val townyAPI: TownyAPI,
    private val configurationProvider: ConfigurationProvider,
    private val messageService: MessageService,
    private val bukkitExecutorService: BukkitExecutorService
) {

    @Async
    @Execute
    fun execute(player: Player) {
        val locationOwnerTown = townyAPI.getTown(player.location) ?: run {
            messageService.send(player, "<red>Эта территория не принадлежит какому-либо городу.")
            return
        }

        if (!isAlly(player, locationOwnerTown)) {
            messageService.send(player, "<red>Вы не являетесь союзником этого города.")
            return
        }

        val category = townyService.getCategory(locationOwnerTown) ?: run {
            openSelectCategoryDialog(player, locationOwnerTown)
            return
        }

        TODO()
    }
}
 
@Route(name = "builds") class MyCommandCommand @Inject constructor( private val miniMessage: MiniMessage, private val townyService: TownyService, private val townyAPI: TownyAPI, private val configurationProvider: ConfigurationProvider, private val messageService: MessageService, private val bukkitExecutorService: BukkitExecutorService ) { @Async @Execute fun execute(player: Player) { val locationOwnerTown = townyAPI.getTown(player.location) ?: run { messageService.send(player, "<red>Эта территория не принадлежит какому-либо городу.") return } if (!isAlly(player, locationOwnerTown)) { messageService.send(player, "<red>Вы не являетесь союзником этого города.") return } val category = townyService.getCategory(locationOwnerTown) ?: run { openSelectCategoryDialog(player, locationOwnerTown) return } TODO() } }
offtop
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
offtop Overwrite, ну если для тебя такое сложно ты просто как программист слабоват. Мне когда надо, и жс, и пхп, и питон читаю, даже если не пишу на них. Достаточно знать 1 ЯП, а дальше дело синтаксиса
 
offtop Overwrite, ну если для тебя такое сложно ты просто как программист слабоват. Мне когда надо, и жс, и пхп, и питон читаю, даже если не пишу на них. Достаточно знать 1 ЯП, а дальше дело синтаксиса
offtop Сложнее всего понять его когда открываешь его в декомпиляторе. По тому что ну вот что это:
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
offtop Его синтаксис это нечто. Мне тоже первое время было немного непонятно, все эти ?, ?: и прочее выглядит странно. Но если провести пару часов за чтением доков (kotlinlang.org), при этом, умея работать с жавой, котлин вызывает только восхищение
Java:
@Route(name = "builds")
class MyCommandCommand @Inject constructor(
    private val miniMessage: MiniMessage,
    private val townyService: TownyService,
    private val townyAPI: TownyAPI,
    private val configurationProvider: ConfigurationProvider,
    private val messageService: MessageService,
    private val bukkitExecutorService: BukkitExecutorService
) {

    @Async
    @Execute
    fun execute(player: Player) {
        val locationOwnerTown = townyAPI.getTown(player.location) ?: run {
            messageService.send(player, "<red>Эта территория не принадлежит какому-либо городу.")
            return
        }

        if (!isAlly(player, locationOwnerTown)) {
            messageService.send(player, "<red>Вы не являетесь союзником этого города.")
            return
        }

        val category = townyService.getCategory(locationOwnerTown) ?: run {
            openSelectCategoryDialog(player, locationOwnerTown)
            return
        }

        TODO()
    }
}
Код:
    private lateinit var messages: FileConfiguration
    
    override fun onEnable() {
        saveDefaultConfig()
        messages = config

        server.pluginManager.registerEvents(this, this)
    }
    
    override fun onTabComplete(sender: CommandSender, command: Command, alias: String, args: Array<out String>): MutableList<String>? {
        if (command.name.equals("help", ignoreCase = true)) {
            val completions = mutableListOf<String>()
            val categories = messages.getKeys(false)
            when (args.size) {
                1 -> completions.addAll(categories.filter { it.startsWith(args[0], ignoreCase = true) })
                2 -> {
                    val category = categories.find { it.equals(args[0], ignoreCase = true) }
                    if (category != null) {
                        completions.addAll(messages.getStringList(category).filter { it.startsWith(args[1], ignoreCase = true) })
                    }
                }
            }
            return completions
        }
        return null
    }
    
    @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
    fun onCommandPreprocess(evt: PlayerCommandPreprocessEvent) {
        val message = evt.message.lowercase()
        if (message.startsWith("/help")) {
            val args = message.split(" ")
            val category = if (args.size > 1) args[1] else null
            val messages = messages.getStringList(category ?: "help")
            evt.player.sendMessage(ChatColor.translateAlternateColorCodes('&', messages.joinToString("\n")))
            evt.isCancelled = true
        }
    }
}

ужас же
Объединено

offtop
Вам необходимо зарегистрироваться для просмотра изображений-вложений


котлин норм тема потому что куда-то сюда можно добавить бекдор и никто в жизни не будет его там искать
 
Будьте осторожны с рекомендациями этого пользователя.
offtop
Этот код выглядит точно так же и на жаве. Это не проблема языка - он просто по стилю не очень

Сложнее всего понять его когда открываешь его в декомпиляторе. По тому что ну вот что это:
Декомпиляторов для котлина ещё не существует. Компиляторы для жавы переводят байткод в жава код, а не в котлин. Но это не проблема разработки
 
offtop
котлин норм тема потому что куда-то сюда можно добавить бекдор и никто в жизни не будет его там искать
Бред, так можно сказать про любую библиотеку. Но я например подключаю его как библиотеку плагина, чтобы сервер сам её скачивал. Для меня обычное дело иметь жарник на 50-60мб из-за веса библиотек - получается они все потенциальный бекдор?
 
Назад
Сверху Снизу