Войти
ФлеймФорумПроЭкты

Царство небесного камня (sim online game) (15 стр)

Страницы: 110 11 12 13 14 15
#210
1:23, 10 окт. 2019

Tiendil
Извини за провокацию.
Я просто хотел апнуть тему :)


#211
12:41, 10 окт. 2019

slatazan
> Я просто хотел апнуть тему :)
а чего ее апать если в этой теме никто не отвечает потому что тут всё похоже на мысли безумца

#212
20:15, 10 окт. 2019

sinoby
Спасибо за внимание.
Просто дождись пока мне надоест.

#213
20:37, 21 окт. 2019

// ---
// социальный атракцион.
// для мирных игроков, которые не бьют мобов.

В игре нет чата, но есть пропечатка событий (рядом и глобальных).
Среди глобальных весточек, можно печатать микро-псевдо-стишки,
которые публикуют игроки, но слова они собирали по квэстам.
(тоесть, админы должны собрать некий словарь для мамкиных рэперов).
(надо быть талантливым, чтобы устроить политоту, мат, рекламу).

? Что надо делать игроку для такого сомнительного игрового опыта ?
Игрок развивает персонажа, который максимально удобен для мирного
собирательства. Можно сделать цэпочку квэстов аля _обучение_артиста.

Игроку позволяют не гриндить монстров через боевую систему,
но монстры всё-равно будут играть свою роль. В этих квэстах важно,
что игрока заставляют брать нужные таланты, чтобы он максимально
быстро взял талант _камуфляж, чтобы бегать в мирной невидимости.
(игровая роль _солдат не подходит для квэстов _обучение_артиста).

Бегая в невидимости, игрок собирает предметы (и камни, и травы),
из-за того, что игрок сдал экзамен, у него есть предмет одежды
по теме творчества - если предмет экипирован, то иногда персонажу
выпадают предметы-слова.
Пачку слов можно получить за каждо-дневный квэст.

Можно накопить побольшэ слов, и оформить требования шаблона стиха.
Если стих достойный, по мнению игрока, то надо купить
_место_в_сетке_вешяния глобального рэп-радио.

Допустим, что можно друзьям сказать (через свои каналы связи)
время эфира для своего стишка (ну и сам стишок, чтобы не спутали).
Каждый такой стишок можно плюсануть или минусануть.
// Возникнет спец-окно _оценить..
// Там будет сам стишок, и правила наподобие..
// Минус 5 золота за то, чтобы влепить стишку минус.
// Минус 1 золота за то, чтобы похвалить стишок.

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

Если стишок накопил некий порог плюсиков, то награда удвоена,
а иначе, за квэст-публикацию своего творения дают _умолчанку.
Что конкретно будет призом - надо выяснить, когда игра будет готова.

Часть предметов-слов можно распологать в пвп-локациях (злые игроки).
// Сейчас, абонентская оплата - это _премиум_акаунт на фри-ту-плэях.

Можно внедрить _игнор_пвп, как подобие премиум_акаунта - баф хранит
число суток - отнимаем независимо от входа игрока в игру.
Явное отличие - баф прицеплен к явному персонажу, а не на весь кабинет.

Баф не позволяет нападать на других игроков, и не позволяет другим
игрокам нападать на носителя == игнорирование сражэний между игроками.
// Скидывать на игрока толпу монстров нельзя из-за боевой системы.
Бегай по опасным пвп-зонам (там почти нет монстров), и собирай слова.
// Здесь даж камуфляж не нужэн, наверно.

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

#214
22:55, 22 окт. 2019

Нужно как-то внедрять просветление в игру.

Нет единиц времени.
// слово _время - это ярлык.

Есть счётчик длительности чего-то.
// счётчик создан для локального контроля.

Счётчик длительности такого-то дела - это сложно говорить, в бытовом смысле.
Поэтому люди везде применяют ярлыки и сокрашения.

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

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

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

Среди таких квэстов, надо побольшэ бить ересь почитателей вархамеров.
Либо наоборот, заигрывать на этой ереси, как на грома-отводе.

#215
22:41, 17 ноя. 2019

Бандит - персонаж (роль и набор талантов).
Для него (роль бандита) должна быть своя квэстовая цепочка.
В такие уникальные квэсты,
надо внедрить литературные мудрости..
1 = как бандитизм, в целом, всегда был _позитивом_для_всех.
2 = как бандит склонен к сговору, вместо одинокого маньячества.
3 = анти-тромбы == насильно крутят ресурсы == версия _робин_гудства.

Проблемность этих пунктов и возможных трактовок..
= офиц власть можт заподозрить пародию на себя, и прикроет проект.
// Тоесть, во власти сплошные бандиты, и сплошной сговор.

= слишком близка роль Солдата (убивай, ради мирной жизни).

// Бандит, литературно, из глаз автора лирики для игры, это наглость,
// и некое: умей взять то, чего не создал сам.
// Наглость - это про альфачей, и тех, кто в очереди не будет стоять.
// Тоесть, идёт явная отгородка от нормальных участников племени.
// Возможно, какого-то чела выгнали из очереди - так он и стал
// наглецом-отморозком, который бродит рядом, и выхватывает то,
// что плохо закрепили нормальные участники племени.

В игровом плане, таланты бандита должны ускорять убийство монстров.
Тоесть, солдат на себя отвлекает, и у него есть возможность _тупить
(много брони, большой жызни-мер - пару-тройку ударов лишних можно пропустить),
зато мало урона, и малая скорость убирания _выгодных_данжэвых монстров.

Вобшем, солдат - это большэ маньячила, для которого _приказ важней всего.
А бандит - это компанейский прихлебатель, который можт _всё_ускорять
(срезать пути, увеличивать выгоду - богатство быстрей накопить).

При этом, было упомянуто, что Доктор (третий персонаж-роль), как маньяк.

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

#216
20:54, 4 дек. 2019

// --- Царство - проба на годоте.

Новая версия проекта - снова симулятор онлайн-игры на локальном компе.
Не хочу вникать в мульти-плэерные технологии.
По сути, онлайн-игра на локалке - это сингловая гриндилка - норм.
Скрипты будут открытыми.


// ---
Базовая сцена-нода - это некая панэль, как рабочий стол.

К этой ноде, добавляем..
= сцена главного сервера. // всегда 1 штука.
= саб-сервер. // 1 штука, но можно большэ.
= визуализатор игрока. // 2 или 4 штуки для тэстирования взаимо-действий.
= элементы рабочего стола (несколько кнопок).

Допустим, главный сервер стартует автоматически, вместе с рабочим столом.

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

Кнопка для запуска очередного визуализатора - имита клиент-проги.

Кнопка для открытия панэльки с глобальными опциями
(день сервера, особые бонусы всяких праздников).

Итого, на базовом рабочем столе, будет несколько дочерних окон,
которые можно сворачивать или выбирать размер-место, на экране.

// ---
В старой версии, главный сервер _догружал все локации на саб-сервер.

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

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

// Тоесть, у саб-сервера есть _сразу_всё, но _слоты_игроков наполнены
// чем-угодно, и будут проигнорированы, до правильного наложэния
// чисел из принятой сохранки.

Главный сервер следит за тем, чтобы один игрок (акаунт-кабинет)
не мог вывести в игровой мир двух своих персонажей одно-времено.

// ---
Клиент-пульт (аля клиент-прога) привязывать к саб-серву номерком.
// Не надо делать клиентов чилдами саб-серверов.

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

// Сам набор узлов пути нельзя передать на саб-сервер.
// Кликнул - узнали направление - теперь я двигаюсь туда.
// Если место клика не достижымо одним лучом, то вызываем поиск
// пути, чтобы получить набор узлов, и лучей между узлами.
// Каждую секунду, клиент-прога получает от саб-сервера набор позиций,
// и проверяет момент, когда надо послать на сервер _новый_луч.
// Такой официальный бот движухи персонажа.


// ---
Каждому клиент-пульту можно _пробросить сигналы от любых доступных
кнопок управления компутером, как в старых файтингах, где можно
было с одной клавиатуры рулить двумя персонажами.

Не забыть локальные блокеры выхода курсора за рамки псевдо-окна.

// ---
Годот - новый проект - нужна чистая папка - создал.
Перенёс файлы из новой папки внутрь king-sky-stone3/server,
удалил старый адрес из стартового окна годота,
импортировал проект с нового места - годот стал импортировать
все ресурсы из папки server/real.

Годот не вылезает из папки проекта, чтобы можно было переместить
файл проекта в папку server/godot_vers, и вылезать в родительскую
папку, чтобы перейти в server/real, чтобы через скрипт забирать
лиш нужные ресурсы, игнорируя наброски.

Думаю, надо разделить-дублировать папку real.
Создаю новую папку king-sky-stone3/godot_vers, и переношу туда
4 файла годот-проекта (три умолчанки, и стартовая панель-сцена).

Удаляю старый адрес, импортирую с нового адреса, и выставляю окна
годот-редактора, как привык - эти окна годот не хочет хранить
в файле проекта - хранит их в том файле, который рисуют
в стартовом окне (аля адрес проекта, с которым недавно работали).

// годот-файлы, типа x_pixels.tga.import, надо будет удалить вручную
// из server/real
// Наброски оставлять в server/real, а рабочие файлы надо будет
// перенести в server/godot_vers/real.


Работа хорошо идёт, когда рельсы настроены.
Но даж в готовом движке (Godot), можно годами строить свои рельсы.

#217
23:10, 6 дек. 2019

По мотивам темы
https://gamedev.ru/flame/forum/?id=248623
прикинул свой вариант языка програмирования

// ---
// BEG или СТА или старт
// END.. или ФИН.. или финиш..
// ARG.. или ВХОД.. или знак %.. // константа внутри процы.
// VAR.. или ЗДЕСЬ.. или знак *.. // переменка внутри процы.
// %..*  крюк // перевод внешней переменки внутрь процедуры.
// Запятая вне-стрингов, как перенос выражения на новую строку,
// но можно использовать запятые в одной строке, для глаз.

// Подразумеваю, что компилятор не требует деклараций - парсит,
// подменяет, готовит, а потом пробует компилировать и линковать.


// ---
МОДУЛЬ консоль // в первых строках файла - конец файла, как закрытие модуля

СТА  печать_строки // бирка и название, как начало отработки события.
  %..8м  форматирование // масив байтов // входная константа.

  %..0м,
  хвост // свободный масив для парсинга.

{ // блок можт быть скрытым.
  // Если хвост нолевой - не нашли никого, то формат игнорим.
  *..8м  п = (базовая_библа)РАЗБОР форматирование хвост // местный п.
  (базовая_библа)ПЕЧАТЬ п
  (базовая_библа)ФИНИШ_СТРОКИ
}

ФИН.. // возврат из процедуры _ничего



// ---
ВНЕДРИТЬ.МОДУЛЬ  консоль // консоль( где-найти-если-чо)


ГЛАВНЫЙ_СТАРТ  название_проги_для_названия_окна

  %.32 арг1 // int32 сколько строк искать внутри "арг2_вектор".
  %.8м арг2_вектор // масив из байтов // ноли делят строки.

  *.32  ч1 = 10
  *.32ф ч2 = 2 // парсер добавит _точка_ноль
  консоль.печать_строки  "%ч %ч" ч1 ч2 ч1
  // парсер компилятора проверит формат, и отметит в дебаг-лог,
  // что у этого вызова лишний (третий) хвостовой аргумент.

  ч1 = 20
  ч2 = 30 // парсер добавит _точка_ноль
  консоль.печать_строки  "%ь %ч %ч"  ВЕС( БОЛЬШЕ), ч1, ч2
  // первым, из хвоста, выбирают число больше других, в хвосте

  *.. кусок = бум_бум // auto var
  консоль.печать_строки  кусок.ляля // напечатают "сбой"

  ВЫХ 0 // return 0
ФИН..32


СТА  бум_бум // можно разместить процу после её вызова в коде.
  //%..32  тэст = 11 // входное число, с умолчательным значением.
  %..*  тэст2 = мой_типаж // НОВЫЙ мой_типаж // кусок для парэнта процы.

  ВЫХ тэст2
ФИН..мой_типаж // возврат из процедуры указки на мой_типаж


ТИП // название упоминаем лиш в конце перечисления элементов
  *.32 номер = 0 // свойство 1
  *.8м имя = "-" // свойство 2 (указка на масив байтов)
  *.8м[4] три_бкувы = "лес\0" // явные 3 байта + нолик_замыкания

СТА  ляля
  ЕСЛИ ! номер ТО
    ВЫХ "сбой"
  ВЫХ имя
ФИН..8м

ФИН..мой_типаж

// АП == break
#218
21:02, 10 дек. 2019

// ---
Много мыслей по дизайну, и всяким дальним деталям.
А ближния практика - топчется на месте.
Годот всё-таки капризный.
Ресурсы заимствовать трудно,
если не сваливать их в корневую папку проекта.


// --- базовое дерево проекта..
= (Node) test_base // сюда привязан скрипт test_base.gd .
== (Panel) Panel  // подразумеваю рабочий стол.
=== кнопки для запуска Саб-сервера и Пультов для игроков.

== (Viewport) vp_pult1 // сюда добавим крупную чилд-ноду.
== (Spatial) vis_base
=== (Viewport) vp_vis1 // три-мерная картинка для первого пульта.
==== нода загружаемой локации (сцена логина, или любая локация).
===== тэстовый грид-мэп, тэстовая камера, направленый светик.

// --- код внутри test_base.gd

extends Node


# Called when the node enters the scene tree for the first time.
func _ready():
  $Panel.rect_size.x = get_viewport().size.x
  $Panel.rect_size.y = get_viewport().size.y
  
  var tre = 56
  print( tre )
  print( g5.test_sky5_glob )
  print( g6.test_sky6_glob )

#---------



# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
#  pass


func Panel_GlobExit_pressed():
  get_tree().quit()
#---------



var test_player1 = 0

func _on_sta_player_pressed():
  # тэстируем на одном
  if test_player1:
    print( "test now more")
    return
  test_player1 = 1

  var user_wnd = Sprite.new() # база окна. // надо заменить чтобы курсор ловить.
  $Panel.add_child( user_wnd) # добавляем окно игрока на рабочий стол.


  # ---
  # Вероятно, код нижэ обязан быть в другом скрипте,
  # и вызван здесь, как процедура

  var in_vp_res = load( "n_vis_pult/in_viewport.tscn")
  var in_vp = in_vp_res.instance() # структура фона и кнопок
  $vp_pult1.add_child( in_vp) # выделено отдельно, чтобы кнопки удобней создавать.
  # При этом, подразумеваю, что часть кнопок надо создавать из сохранки игрока,
  # когда игрок сам создавал себе ярлыки для абилок и шмоток.


  var rtt = $vp_pult1.get_texture()
  user_wnd.texture = rtt # переправляем то, что происходит на пульте игрока.
  # При этом, фон пульта должн отдельно принимать на себя три-мерную картинку.

  var zazor_x = (get_viewport().size.x - $vp_pult1.size.x) / 2
  var zazor_y = (get_viewport().size.y - $vp_pult1.size.y) / 2
  #user_wnd.position.x += $vp_pult1.size.x / 2 + zazor_x
  #user_wnd.position.y += $vp_pult1.size.y / 2 + zazor_y
  # OR
  user_wnd.centered = 0
  user_wnd.position.x += zazor_x
  user_wnd.position.y += zazor_y


  var rtt2 = $vis_base/vp_vis1.get_texture()
  var spw = in_vp.get_node( "sprite_world") # найти фон пульта.
  spw.texture = rtt2 # вот здесь транслируем три-мерную картинку на фон пульта.
  #spw.position.x += $vis_base/vp_vis1.size.x / 2
  #spw.position.y += $vis_base/vp_vis1.size.y / 2
  # OR
  spw.centered = 0


  # ---
  # $vis_base/vp_vis1.add_child( загрузить_сцену_нужной_локации)
  # $vis_base/vp_vis1.add_child( загрузить_сгенерить_персонажа)
  # Но пока, вместо локации есть изначальные _грид, _камера, _светик.
  # Хотя, изначальное создание Пульта для игрока подразумевает уни-сцену,
  # где декорация, и ввод логин-пароля - если всё успешно, то пришлют
  # бриф-инфо - по ним игрок выбирает персонажа - из бриф-инфы перса можно
  # понять какую локацию грузить.
  # Тоесть, даж если начинать всегда со _старт_локации, то у новых
  # гладиаторов она отлична от старых - так-что одна развилка точно есть.
  # 

#---------

#219
22:26, 28 дек. 2019

// ---
Квэсты-повторялки, которые нельзя _взять.

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

С другой стороны, можно отменить получение квэста с первого
монстра, чтобы игроки пытались выбивать такие предметы
с других монстров, если с любимого-лёгкого монстра не получается.
Тоесть, это попытка настроить _лютую_природу против игроков,
чтобы они не сидели на одной поляне, на одном повторяемом квэсте.

#220
20:25, 1 фев. 2020

// ---
Вход в документацию движка Годот, в надежде на русский перевод..
тык


// --- попытался сделать клон три_в_ряд..
пук

// --- я снова сделал клон тетриса..
так


// --- человек доделывает клон тетриса..
https://www.youtube.com/watch?v=GJgzT4ikMAE

вот

#221
23:22, 6 фев. 2020

Для тех, кто не понял _как_ сменить локацию внутри движка Godot ...

Стандартное демо платформера,
но я туда добавил точ-филды, чтобы телепортировать в другую _сцену_
https://github.com/slatazan/br1/blob/master/physics_platformer_metro.zip

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

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

# file coin_exit.gd
extends Area2D
class_name Coin_Exit # точ-филд выхода из локации

var taken = false
export var next_name := "an" # next location scene_name.
export var pos_name := "-" # название ноды, куда поставить игрока.
export var vis_name := "-" # название ноды, куда поставить камеру.

func _on_body_enter( body):
  if not taken and body is Player: # не_взято и косание_игрока
  #{
    ($Anim as AnimationPlayer).play( "fade_screen")
    taken = true # взято
    global.position1_name = pos_name
    global.position2_name = vis_name
    global.goto_scene( next_name)
  #}
#---------


# file global.gd
extends Node

var position1_name := "-"
var position2_name := "-"
var current_scene = null

func _ready():
  var root = get_tree().get_root()
  current_scene = root.get_child( root.get_child_count() -1)
#---------

func goto_scene( path):
  call_deferred( "_deferred_goto_scene", path)
#---------

func _deferred_goto_scene( path):
  current_scene.free()
  var s = ResourceLoader.load( path)
  current_scene = s.instance()
  get_tree().get_root().add_child( current_scene)
  get_tree().set_current_scene( current_scene)
  
  if position1_name != "-":
    var n = current_scene.find_node( position1_name)
    var a = current_scene.find_node( "Player")
    if a and n:
      a.position = n.position
  if position2_name != "-":
    var n = current_scene.find_node( position2_name)
    var a = current_scene.find_node( "Camera")
    if a and n:
      a.position = n.position
#---------

Страницы: 110 11 12 13 14 15
ФлеймФорумПроЭкты