[ГАЙД] Трейды.

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
551
Не играл на СкайБлоке, но попытался сделать что-то похожее. На написание всего кода потратил больше двух часов.
Форматирование (BB-код):
Событие игрок заходит в игру
    Установить значение переменной(%player%TradeRequest, False)
    Установить предмет в переменную(tradeMoney, Золотой блок)
    Установить значение переменной(%player%Money, 100)

Событие игрок пишет в чат
    Если текст содержит(Сообщение игрока, #trade) {
        Обрезать текст(tradeNick, Сообщение игрока, 0, 7)
        Выбрать игрока по условию; если имя равно(tradeNick)
        #Шифт + пкм и выбираешь "Игрок по умолчанию"
        Отправить сообщение игроку(Вы предложили трейд игроку %selected%!)
        #Шифт + пкм и выбираешь "Выборка"
        Отправить сообщение игроку(Вам предложил трейд игрок %player%!, Напишите #yes чтобы принять трейд, Напишите #no чтобы отклонить трейд)
        Установить значение переменной(%selected%TradeRequest, %player%)
        Установить значение переменной(%default%TradeRequest, %selected%)
    }
    Если переменная НЕ равна(%player%TradeRequest, False) {
        Если текст содержит(Сообщение игрока, #yes) {
            Отправить сообщение игроку("Трейд принят!")
            #Координаты - координаты сундука, в который нужно положить определенные предметы.
            Выбрать игрока по условию; если имя равно(%player%TradeRequest)
            Объединить текст(%selected%MoneyString, Ваш баланс: , %selected%Money)
            Объединить текст(%default%MoneyString, Ваш баланс: , %default%Money)
            Установить имя предмету(tradeMoneyItem, tradeMoney, %selected%MoneyString)
            Установить предмет в контейнер(Координаты, tradeMoneyItem, 47)
            Установить имя предмету(tradeMoneyItem, tradeMoney, %default%MoneyString)
            Установить предмет в контейнер(Координаты, tradeMoneyItem, 52)
            #Шифт + пкм, выбираем "Выборка"
            Открыть инвентарь блока из игры(Координаты; Копия)
            #Шифт + пкм, выбираем "Игрок по умолчанию"
            Открыть инвентарь блока из игры(Координаты; Копия)
            Установить значение переменной(%selected%TradeNumber, 1)
            Установить значение переменной(%default%TradeNumber, 2)
            #Желательно, чтобы переменная была сохранённой. Хотя и без этого должно работать
            Создать массив(%default%TradeArr)
            Создать массив(%selected%TradeArr)
        }
        Если текст содержит(Сообщение игрока, #no) {
            Отправить сообщение игроку("Предложение на трейд отклонено!")
            Установить значение переменной(%player%TradeRequest, False)
        }
    } Иначе {
        #Шифт + пкм, игрок по умолчанию
        Отправить сообщение игроку(У вас нету запроса на трейд!)
    }

Событие игрок кликнул по инвентарю
    Если название открытого инвентаря равно(Трейд) {
        Выбрать игрока по условию; если имя равно(%player%TradeRequest)
        Если кликнутый слот равен(47, 52, 4, 13, 22, 31, 40, 49) {
                Отменить событие
        }
        Если значение равно(%default%TradeNumber, 1) {
            Если кликнутый слот равен(5, 6, 7, 8, 14, 15, 16, 17, 23, 24, 25, 26, 32, 33, 34, 35, 41, 42, 43, 44) {
                Отменить событие
            }
            Если кликнутый слот равен(0, 1, 2, 3, 9, 10, 11, 12, 18, 19, 20, 21, 27, 28, 29, 30, 36, 37, 38, 39) {
                #Тут ничего не ложим
                Если предмет в курсоре НЕ равен() {
                    #Шифт + пкм, игрок по умолчанию
                    Установить предмет в курсор
                    Ждать(1 тик)
                    Добавить в конец массива(%default%TradeArr, Кликнутый предмет)
                } Иначе {
                    Отменить событие
                }
            }
            Если кликнутый слот равен(46) {
                Отменить событие
                Присвоить значение переменной +=(%default%TradeMoney, 100)
                #Шифт + пкм, игрок по умолчанию
                Отправить сообщение игроку(Вы поставили 100 монет!)
            }
            Если кликнутый слот равен(45) {
                Отменить событие
                Если значение переменной(%selected%TradeInfo, Accepted) {
                    Присвоить значение переменной -=(%selected%Money, %default%TradeMoney)
                    Присвоить значение переменной -=(%default%Money, %selected%TradeMoney)
                    Присвоить значение переменной +=(%selected%Money, %default%TradeMoney)
                    Присвоить значение переменной +=(%default%Money, %selected%TradeMoney)
                    #Шифт + пкм, выбрать игрока по умолчанию на все последующие действия
                    Отправить сообщение игроку(Трейд успешно произведён!)
                    Закрыть инвентарь
                    #Шифт + пкм, выборка на все последующие действия
                    Отправить сообщение игроку(Трейд успешно произведён!)
                    Закрыть инвентарь
                    Вызвать функцию(tradeGiver)
                    Выбрать игрока по умолчанию
                    Вызвать функцию(tradeGiver)
                } Иначе {
                    Установить значение переменной(%default%TradeInfo, Accepted)
                    #Шифт + пкм, выборка
                    Отправить сообщение игроку(Игрок подтвердил трейд!)
                }
            }
            Если кликнутый слот равен(48) {
                Отменить событие
                #Шифт + пкм, выбрать игрока по умолчанию на все последующие действия
                Установить значение переменной(%default%TradeRequest, False)
                Отправить сообщение игроку(Трейд отменён!)
                Закрыть инвентарь
                #Шифт + пкм, выборка на все последующие действия
                Установить значение переменной(%selected%TradeRequest, False)
                Отправить сообщение игроку(Игрок отменил трейд!)
                Закрыть инвентарь
            }
        } Иначе {
            Если кликнутый слот равен(0, 1, 2, 3, 9, 10, 11, 12, 18, 19, 20, 21, 27, 28, 29, 30, 36, 37, 38, 39) {
                Отменить событие
            }
            Если кликнутый слот равен(5, 6, 7, 8, 14, 15, 16, 17, 23, 24, 25, 26, 32, 33, 34, 35, 41, 42, 43, 44) {
                #Ничего не ложим внутрь
                Если предмет в курсоре НЕ равен() {
                    #Шифт + пкм, игрок по умолчанию
                    Установить предмет в курсор
                    Ждать(1 тик)
                    Добавить в конец массива(%default%TradeArr, Кликнутый предмет)
                } Иначе {
                    Отменить событие
                }
            }
            Если кликнутый слот равен(51) {
                Отменить событие
                Присвоить значение переменной +=(%default%TradeMoney, 100)
                #Шифт + пкм, игрок по умолчанию
                Отправить сообщение игроку(Вы поставили 100 монет!)
            }
            Если кликнутый слот равен(50) {
                Отменить событие
                Если значение переменной(%selected%TradeInfo, Accepted) {
                    Присвоить значение переменной -=(%selected%Money, %default%TradeMoney)
                    Присвоить значение переменной -=(%default%Money, %selected%TradeMoney)
                    Присвоить значение переменной +=(%selected%Money, %default%TradeMoney)
                    Присвоить значение переменной +=(%default%Money, %selected%TradeMoney)
                    #Шифт + пкм, выбрать игрока по умолчанию на все последующие действия
                    Отправить сообщение игроку(Трейд успешно произведён!)
                    Закрыть инвентарь
                    #Шифт + пкм, выборка на все последующие действия
                    Отправить сообщение игроку(Трейд успешно произведён!)
                    Закрыть инвентарь
                    Вызвать функцию(tradeGiver)
                    Выбрать игрока по умолчанию
                    Вызвать функцию(tradeGiver)
                } Иначе {
                    Установить значение переменной(%default%TradeInfo, Accepted)
                    #Шифт + пкм, выборка
                    Отправить сообщение игроку(Игрок подтвердил трейд!)
                }
            }
            Если кликнутый слот равен(53) {
                Отменить событие
                #Шифт + пкм, выбрать игрока по умолчанию на все последующие действия
                Установить значение переменной(%default%TradeRequest, False)
                Отправить сообщение игроку(Трейд отменён!)
                Закрыть инвентарь
                #Шифт + пкм, выборка на все последующие действия
                Установить значение переменной(%selected%TradeRequest, False)
                Отправить сообщение игроку(Игрок отменил трейд!)
                Закрыть инвентарь
            }
        }
    }

#В идеале добавить больше таких проверок. Зачем они нужны:
#Нельзя отследить, закрыл ли игрок инвентарь или нет.
#Но если игрок выполняет определенные действия - значит закрыл
#Если игрок пишет в чат - инвентарь не открыт, если игрок бьёт игрока - инвентарь не открыт и т.д.
Событие игрок передвигается
    Если значение НЕ равно(%default%TradeRequest, False) {
        Выбрать игрока по условию; если имя равно(%default%TradeRequest)
        #Шифт + пкм, выборка на все последующие действия
        Закрыть инвентарь
        Отправить сообщение игроку(Игрок отменил трейд!)
        Установить значение переменной(%default%TradeRequest, False)
        Установить значение переменной(%selected%TradeRequest, False)
    }

Функция(tradeGiver)
    #Насчёт плейсхолдера я не уверен, возможно нужно вместо %player% что-то другое
    Установить значение переменной +=(%player%TradeGiverNumber)
    Получить элемент массива(%player%TradeArr, %player%TradeGiverNumber, %player%TradeGiverItem)
    Выдать переменные(%player%TradeGiverItem)
    Получить размер массива(%player%TradeArr, %player%TradeGiverLength)
    Если значение НЕ равно(%player%TradeGiverLength, %player%TradeGiverNumber) {
        Вызвать функцию(tradeGiver)
    }

Если вы найдете какие-то баги/не будет работать выдача предметов - пожалуйста, пишите.

Скриншот, как надо заполнить сундук для трейдов:
1690562361462.png
 

Walkingsword

Участник
Регистрация
9 Май 2023
Сообщения
52
Я так заметил, что там надо писать
#yes чтобы принять.
А не клик по предмету.
Можно ли клик по предмету сделать?
Заменить сообщение на клик.
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
551
Я так заметил, что там надо писать
#yes чтобы принять.
А не клик по предмету.
Можно ли клик по предмету сделать?
Заменить сообщение на клик.
Можно. Просто меняешь событие на "Игрок кликает пкм", делаешь другое "Если"(Вместо той проверки на #yes) и убираешь проверку на #no. "Если переменная НЕ равна(%player%TradeRequest, False) {" надо оставить. Зачем оно нужно: это проверка, есть ли у игрока запрос на трейд. Она необязательна, если ты её уберешь(Надо убрать "Иначе" тоже) - просто не будет выводится сообщение "У вас нету запроса на трейд" когда игрок пытается принять этот самый трейд.
 

TimePlay

Новичок
Регистрация
3 Май 2023
Сообщения
90
топ туториал для всей семьи
держи сникерс
Snickers-PNG-HD-Photos.png
 

Walkingsword

Участник
Регистрация
9 Май 2023
Сообщения
52
Максим, можно попроще плиз?
Что уберётся чо к чему.Нихрена не понял
 

Sirenkaaa

Гость
Регистрация
12 Июл 2023
Сообщения
114
Up
 

_Mr_ded_

Эксперт
Регистрация
5 Июн 2023
Сообщения
32
#В идеале добавить больше таких проверок. Зачем они нужны:
#Нельзя отследить, закрыл ли игрок инвентарь или нет.
#Но если игрок выполняет определенные действия - значит закрыл
#Если игрок пишет в чат - инвентарь не открыт, если игрок бьёт игрока - инвентарь не открыт и т.д.
1721142795165.png
Теперь можно)
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
358
#Но если игрок выполняет определенные действия - значит закрыл
зачем, в переменной можно хранить "открыто ли окно трейдов", в ней значение true/false
в цикле сделать открытие, если значение == true
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
358
Он был против "вечных" циклов XD

типо это очень не оптимизировано. Я пытался ему объяснить обратное, но он уперся
многие меня пытались "уговорить" от вечных циклов, опираясь на нагрузку

но никто из них не проверял, что даже если в выборке много людей действия всё равно запускаются в одном экземпляре
 

Meds67u

Участник
Регистрация
19 Окт 2023
Сообщения
2
я не удивлён, что где Mee8YT, нету умных слов
 

Mee8YT

Эксперт
Регистрация
3 Май 2023
Сообщения
358
я не удивлён, что где Mee8YT, нету умных слов
чел, ты на серьёзке предлагаешь использовать десятки событий, чтобы переоткрыть инвентарь игроку?
не проще циклом открывать?
 
Сверху