- Регистрация
- 10 Июн 2023
- Сообщения
- 538
Не играл на СкайБлоке, но попытался сделать что-то похожее. На написание всего кода потратил больше двух часов.
Если вы найдете какие-то баги/не будет работать выдача предметов - пожалуйста, пишите.
Скриншот, как надо заполнить сундук для трейдов:
Форматирование (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 1690562361462.png](https://ruforum.mineland.net/data/attachments/1/1989-0b29497050c3f43211f200e2822a5435.jpg)