RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2423992 views

я ваще балдею от этого вашего ксп,

$chosen_artifact = $мусорные_артефакты[arti_number]
я ваще балдею от этого вашего ксп #2721 07.02.2024 08:00 (2 years ago)

dmvikar:

Код:
$chosen_artifact = $мусорные_артефакты[arti_number]

Огромное спасибо, выручил)
Я понял, то есть если хочу, к примеру, из массива вытягивать текст, то переменная, к которой я этот текст хочу привязать тоже должна быть текстовой, верно?
Оно мне просто 0 выдало на addobj, я туда $ добавил и теперь выдает что нужно)

я ваще балдею от этого вашего ксп,
Тут вместо int ничего, а вместо string - $.

Массив можешь не именовать по индексу, если он тебе не нужен. Так удобнее, если ты захочешь в середину что-то потом воткнуть, да и возни меньше и ошибки не будет, если индекс пропустишь или опечатку сделаешь.

$мусорные_артефакты[] = "Игла"
        $мусорные_артефакты[] = "Жмых"

В таком виде он автоматом задает следующий индекс.

А вот оптимизация). Можешь добавлять сразу из массива, без дополнительной переменной. А чтоб не менять крайний индекс в рандоме при добавлении элементов в массив, сразу втыкаешь размер массива.

AddObj $мусорные_артефакты[rand(0,arrsize('$мусорные_артефакты')-1)]
я ваще балдею от этого вашего ксп #2721 07.02.2024 08:13 (2 years ago)

Все, кайф

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

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

я ваще балдею от этого вашего ксп #2721 07.02.2024 08:15 (2 years ago)

я ваще балдею от этого вашего ксп:

ожешь добавлять сразу из массива, без дополнительной переменной.

О, а вот это прикольно, думаю сразу сейчас сделаю все в таком формате, пока не слишком много кода, спасибо)

я ваще балдею от этого вашего ксп #2721 07.02.2024 08:23 (2 years ago)

Так-с, а переменная мне все равно наверное нужна, потому что при нахождении артефакта я еще для красоты вывожу в лог его название, то есть я в теории могу задать какой-то переменной значение $a = $мусорные_артефакты[rand(0,arrsize(’$мусорные_артефакты’)-1)], и оно в рамках одной итерации будет выдавать мне название того арта, который добавился в инвентарь?

Щас имя арта при его получении вот так реализовано p “Вы нашли редкий артефакт: ” + $chosen_artifact + “!” , тут $chosen_artifact как раз та моя переменная, но пока не понимаю, как без нее название добавлять)

я ваще балдею от этого вашего ксп,
Если нужно название, то без временной переменной никак. Используй вложенное выражение вместо плюсов

p "Вы нашли редкий артефакт: <<$a>>!"
я ваще балдею от этого вашего ксп #2721 07.02.2024 09:13 (2 years ago)

dmvikar:

Код:
AddObj $мусорные_артефакты[rand(0,arrsize(’$мусорные_артефакты’)-1)]

А я правильно понимаю эту строчку?

Мы добавляем предмет из массива мусорные артефакты с индексом [случайное между: нулем, длиной массива(arrsize же именно ее определяет, верно?)] а минус один здесь для чего? Мы не можем сделать rand(arrsize(’$мусорные артефакты’)?

я ваще балдею от этого вашего ксп #2721 07.02.2024 09:24 (2 years ago)

Еще с неймингом подтвердились мои опасения, сначала мы получаем из массива рандомное значение и добавляем в инвентарь арт с названием A, далее в коде мы задаем переменной artifact_notification значение, которое опять выбирает рандомный индекс из массива, таким образом в инвентарь у нас идет имя А, а в уведомлении получаем имя Б(любое другое из массива), могу ли я как-то привязать нейминг к только что полученному объекту?

я ваще балдею от этого вашего ксп #2721 07.02.2024 09:30 (2 years ago)
art_obtain = rand(1, 100)

if art_obtain <100:
    arti_pool = rand(1, 101)

    if arti_pool <= 75:
        ! Мусорные артефакты
        $мусорные_артефакты[] = "Игла"
        $мусорные_артефакты[] = "Жмых"
        $мусорные_артефакты[] = "Хурма"
        $мусорные_артефакты[] = "Болванка"
        $мусорные_артефакты[] = "Черняжка"
        $мусорные_артефакты[] = "Пластилин"
        $мусорные_артефакты[] = "Спайка"
        $мусорные_артефакты[] = "Головастик"
        $мусорные_артефакты[] = "Перстень"
        $мусорные_артефакты[] = "Очко"
        $мусорные_артефакты[] = "Вилка"
        $мусорные_артефакты[] = "Песчанник"
        $мусорные_артефакты[] = "Клетка"
        $мусорные_артефакты[] = "Пискун"
        arti_number = rand(0,13)
        $chosen_artifact = $мусорные_артефакты[arti_number]
        p "Вы нашли мусорный артефакт: <<$chosen_artifact>>!"
        pl
        ! Добавляем артефакт в инвентарь игрока
        AddObj $chosen_artifact
    elseif arti_pool <= 91:
        ! Обычные артефакты
        $обычные_артефакты[] = "Бенгальский огонь"
        $обычные_артефакты[] = "Кровь камня"
        $обычные_артефакты[] = "Слизь"
        $обычные_артефакты[] = "Медуза"
        $обычные_артефакты[] = "Выверт"
        $обычные_артефакты[] = "Колючка"
        $обычные_артефакты[] = "Капли"
        $обычные_артефакты[] = "Кристалл"
        $обычные_артефакты[] = "Батарейка"
        $обычные_артефакты[] = "Мамины бусы"
        arti_number = rand(0,9)
        $chosen_artifact = $обычные_артефакты[arti_number]
        p "Вы нашли обычный артефакт: <<$chosen_artifact>>!"
        pl
        ! Добавляем артефакт в инвентарь игрока
        AddObj $chosen_artifact
    elseif arti_pool <= 99:
        ! Необычные артефакты
        $необычные_артефакты[] = "Вспышка"
        $необычные_артефакты[] = "Ломоть мяса"
        $необычные_артефакты[] = "Слизняк"
        $необычные_артефакты[] = "Каменный цветок"
        $необычные_артефакты[] = "Грави"
        $необычные_артефакты[] = "Кристальная колючка"
        $необычные_артефакты[] = "Огненный шар"
        $необычные_артефакты[] = "Душа"
        $необычные_артефакты[] = "Ночная звезда"
        $необычные_артефакты[] = "Лунный свет"
        $необычные_артефакты[] = "Колобок"
        $необычные_артефакты[] = "Глаз"
        $необычные_артефакты[] = "Пузырь"
        arti_number = rand(0,12)
        $chosen_artifact = $необычные_артефакты[arti_number]
        p "Вы нашли необычный артефакт: <<$chosen_artifact>>!"
        pl
        ! Добавляем артефакт в инвентарь игрока
        AddObj $chosen_artifact
    else
        ! Редкие артефакты
        $редкие_артефакты[] = "Слюда"
        $редкие_артефакты[] = "Морской ёж"
        $редкие_артефакты[] = "Пленка"
        $редкие_артефакты[] = "Снежинка"
        $редкие_артефакты[] = "Светляк"
        $редкие_артефакты[] = "Пламя"
        $редкие_артефакты[] = "Золотая рыбка"
        arti_number = rand(0,6)
        $chosen_artifact = $редкие_артефакты[arti_number]
        p "Вы нашли редкий артефакт: <<$chosen_artifact>>!"
        pl
        ! Добавляем артефакт в инвентарь игрока
        AddObj $chosen_artifact
    end
else
    ! Выводим сообщение, если ничего не найдено
    p "Вы ничего не нашли"
    pl
end

В принципе вроде смотрится норм, менее 100 строк с учетом массивов, дешево и сердито, сюда еще добавится код с аномалиями и уроном, в теории можно эти расчеты перести куда-то в другое место, ссылаясь на служебные локации или еще чего.. Я вот думаю, мб мне эту тему всю перенести в другой раздел форума, потому что похоже немного на флуд

я ваще балдею от этого вашего ксп:

dmvikar:

Код:
AddObj $мусорные_артефакты[rand(0,arrsize(’$мусорные_артефакты’)-1)]

А я правильно понимаю эту строчку?

Мы добавляем предмет из массива мусорные артефакты с индексом [случайное между: нулем, длиной массива(arrsize же именно ее определяет, верно?)] а минус один здесь для чего? Мы не можем сделать rand(arrsize(’$мусорные артефакты’)?

Массив из двух элементов содержит индекс 0 и 1, а размер массива - 2.

я ваще балдею от этого вашего ксп:

Еще с неймингом подтвердились мои опасения, сначала мы получаем из массива рандомное значение и добавляем в инвентарь арт с названием A, далее в коде мы задаем переменной artifact_notification значение, которое опять выбирает рандомный индекс из массива, таким образом в инвентарь у нас идет имя А, а в уведомлении получаем имя Б(любое другое из массива), могу ли я как-то привязать нейминг к только что полученному объекту?

Так ты должен использовать рандом один раз, сохранить значение в переменную, не важно, как она будет называться, $a или $chosen_artifact, а потом используешь эту переменную для любых целей. Переменная не нужна, если ты используешь полученное значение только один раз.

я ваще балдею от этого вашего ксп:

В принципе вроде смотрится норм, менее 100 строк с учетом массивов, дешево и сердито, сюда еще добавится код с аномалиями и уроном, в теории можно эти расчеты перести куда-то в другое место, ссылаясь на служебные локации или еще чего.. Я вот думаю, мб мне эту тему всю перенести в другой раздел форума, потому что похоже немного на флуд

Переносить или нет, сам решай. Я подписан только на эту тему и вижу посты только с нее и отвечать буду соответственно. Лучше используй дискорд.
То что я тебе говорил про запись без индекса, оно хорошо, но требует определенных правил. В твоем коде оно будет работать, но массив разрастется до немеряных размеров, т.к. каждый раз при выполнениии этого кода все строки будут добавляться снова. Чтобы такого не случалось нужно либо использовать для массива killvar в коце локации, либи инициализироваь массив один раз и больше в ту локацию не заходить.

я ваще балдею от этого вашего ксп #2721 07.02.2024 11:47 (2 years ago)

dmvikar:

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

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

я ваще балдею от этого вашего ксп #2721 07.02.2024 14:21 (2 years ago)

Так-с, ну я даже смог написать ужасно кривую и неудобную систему продажи артефактов + добавил пока тестовую возможность углубляться в Зону, повышая zone_level от которого на данный момент зависит вероятность найти более дорогие артефакты ну и шанс найти артефакты в принципе, магазин сделал через индексированный массив с ценами и целой кучей повторяющегося кода.. 100% можно было сделать раз в 10 короче, но я пока не понимаю как…

if obj 'Игла':
money = money + игла_продажа
delobj 'Игла'
goto $curloc

elseif obj 'Жмых':
money = money + жмых_продажа
delobj 'Жмых'
goto $curloc

Вот кусок кода, ответственного за продажу, ищет конкретный предмет в инвентаре, добавляет N-денег(переменная_продажа равняется цене из массива), и далее проверяет уже следующий предмет.

Из минусов:
Предметы продаются не кучей, чтобы продать 20 предметов - кликаем 20 раз
Только щас понял, что мне не нужна переменная_продажа, я же вроде мог просто прибавлять к money ячейку массива..

Log in or Register to post comments.