-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные MasterGH
-
-
Создан новый раздел Патчи
-
Тема открыта
-
Я создал твинка и дал ему права, как тебе. В девелоп пуш прошел.
Что касается разработки, это все исключительно по желанию и по интересам. Можно строчку написать, а можно ничего не писать. Как фишка ляжет, как настроение будет. У меня как будет время разобраться со своими делами, тоже бы хотел заняться.
4 минуты назад, srg91 сказал:Мне не удалось (если я всё правильно сделал):
Вообще странно очень.
Пора мне. Завтра рано на работу. Не высыпаюсь неделями.
-
Интересны ваши предложения:
1. Идеи, что можно совместно разрабатывать в общих репозиториях? Движки, плагины, трейнеры, даже игры?
2. Как считаете совместно что-то делать в репозиториях интересно? Пару слов
3. Предложения как назвать новый раздел и где его можно разместить?
4. Что может быть в названии тем и что в содержании?
5. Чей хостинг git? (gitlab, github, bitbucket, etc..)
6. Определенный хостинг git для всех или по желанию каждый свой берет?
7. Дать возможность внести пожертвования? Например, в подписи или в профиле или еще где-то
8. Кто хотел бы участвовать? На вскидку человек шесть. Трое на Питоне хотели, трое на плагине CE. Дальше может быть еще куча проектов, а вдруг?
Еще будет нужно разрешение администратора форума
Пока примеры названия и размещения раздела
Скрытый текстТерритория Разработчиков Наши Разработки Совместная работа с репозиториями [Темы] - Разрботка чего-то... - Разрботка чего-то... - Разрботка чего-то...
Здесь у нас все скрыто от не разработчиков. Если возможность доната делать, то можно делать разработку открытой. Например, здесь.
Программирование Совместная работа с репозиториями [Темы] - Разрботка чего-то... - Разрботка чего-то... - Разрботка чего-то...
Могу предложить создать и новую категорию, но пока не придумал разделы.
Хотелось бы идей от наших форумчан по созданию нового раздела совместной разработки. Время формулировки предлагаю ограничить до 22 июля 18-ти часов субботы по Москве. Чуть больше недели, по желанию, подумать над новым разделом. Может быть народ еще подтянется из тех, кто редко заходит.
-
15 минут назад, keng сказал:
Всем админа раздавать точно не стоит. Можно работать через стандартный fork+pullrequest flow, но меня смущает, что в develop на данный момент у любого есть доступ на запись - @MasterGH, ты сейчас это поставил или вчера так же было (Settings -> Workflow -> Branch permissions -> develop -> Write Access: Everybody)?
Админ права только будут у вас.
Я поставил эти права на всех еще вчера. Почему смущает?
@keng я не очень разбираюсь еще в настройках. Если можешь помочь настроить, то я бы настроил с твоей помощью чтобы было удобно и надежно.
----
upd: Я получил твои изменения. Смержил
upd: текущие настройки
-
-
8 минут назад, keng сказал:
db очень уж неохотно принимает пулл-реквесты
Думаю, что нет необходимости.
Кстати, я мог запросто что-то напутать с настройками прав у ветвей. Если что-то не работает, то можно обсудить.
-
Созданы две ветки
1. master - ветвь релизов
2. develop - ветвь разработчиков
Первая ветвь права доступа только у меня. У второй ветви права доступа на любого, кто зарегался на сервисе
У кого есть необходимость исправлять код плагина, можете попробовать. Для этого нужно.
1. Регистрируемся на bitbucket;
2. Качаем клиент SourceTree;
3. Клонируем репозиторий через клиент и переключаемся на последний коммит ветви develop;
4. Дальше вы можете делать сами любые изменения в ветви develop, после чего нужно отправить изменения на сервис;
5. В этой теме можно описаться об изменениях;
6. По возможности буду мержить с мастером и тестить;
Если умеете работать с git-flow (писал о нем в блоге) и терминалом, то можно и с ним.
Когда займусь плагином пока не известно. Ничего не могу обещать.
-
Тогда так
function CEPageControl1Change(sender) UDF1.CEPageControl2.TabIndex = UDF1.CEPageControl1.TabIndex end
upd: поправил
-
Если надо чтобы синхронно вкладки переключались
UDF1.CEPageControl2.OnChange = function (sender) UDF1.CEPageControl2.TabIndex = UDF1.CEPageControl1.TabIndex end
Если я не так понял вопрос, то попробуй переключать вкладки через TabIndex как в примере выше. Смена вкладок вызывает OnChange, на которую можно подписаться как в примере выше.
-
2 часа назад, Submarina сказал:
почему не меняет цвет панели
Меняет цвет панели
function CEButton1Click(sender) UDF1.CEPanel1.Color = 545454 end
-
Могу дать сырое решение
1. Нажимаем на "H" - снимаются по 10-ке плохие параметры (усталость, голод и прочее)
2. Нажимаем на "J" - добавляется 1 очко способностей
Много раз нажимаем на H и J и параметры обновляются у всех персонажей.
При установке указать правильный путь до Cheat.dll в таблице .CT.
Фрагмент
testdllpath: // Путь до dll db 'D:\Cheat.dll',0
Я сделал dll с двумя классами. Подгружается через Cheat Engine через CT таблицу
Скрытый текстusing System; using UnityEngine; namespace NamespaceCheats { public class Cheats { public static void Main() { GameObject go = new GameObject(); go.name = "CheatsActionsKey"; go.AddComponent<ActionsKey>(); } } }
Скрытый текстusing UnityEngine; namespace NamespaceCheats { public class ActionsKey: MonoBehaviour { void Update() { if (Input.GetKey(KeyCode.H)) { foreach (CharacterEntity character in CharacterEntity.__Characters) { character.AddToDepressionStateValue(-10, false); character.AddToFatigueStateValue(-10, false); character.AddToHungerStateValue(-10, false); character.AddToInjuryStateValue(-10, false); character.AddToSicknessStateValue(-1, false); } } if (Input.GetKey(KeyCode.J)) { foreach (CharacterEntity character in CharacterEntity.__Characters) { character.AddToTraitXp(1); character.AddToXpAndLevelUp(1); } } } } }
-
Можешь поискать в сканере памяти эейлеров угол вертикальной оси поворачивая персонажа влево и вправо. Тогда выйдешь на три адреса X,Y,Z эйлеровых углов.
И по аналогии можно попробовать сделать Quaternion.Euler(transform.eulerAngles):
Скрытый текстusing System.Collections; using System.Collections.Generic; using UnityEngine; public class DrawPath : MonoBehaviour { public float distance = 1f; public RectTransform _2dPoint1; public RectTransform _2dPoint2; void Update() { Vector3 position1 = transform.position; // Для кватерниона //Vector3 position2 = position1 + (transform.rotation * Vector3.forward).normalized * distance; // Перевод эйлеровых в кватернион Vector3 position2 = position1 + (Quaternion.Euler(transform.eulerAngles) * Vector3.forward).normalized * distance; // Точка из глаза и точка на дистанции distance в экранных координатах _2dPoint1.position = Camera.main.WorldToScreenPoint(position1); _2dPoint2.position = Camera.main.WorldToScreenPoint(position2); } }
Переписать код на C++ можно декомплировать .net библиотеку C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll через ILSpay. Библиотеку это можно взять из Unity игр или установив движок Unity.
-
18 часов назад, barsuuk сказал:
возник вопрос)) как получить кватернион из точки??
Я думаю, можно найти адреса кватерниона в памяти рядом с адресами позиции. Это 4 раза по 4 байта X,Y,Z,W.
-
Готовый вариант не дам, но может поможет
Если DrawLine должен рисовать две точки на GUI, то:
1. WorldToScreen из "3д-точки1"
2. WorldToScreen из "3д-точки2"
3. "3д-точка1" равна позиции глаз
4. "3д-точка2" = "3д-точка1" + ("3д-направление 3д-точки1") * дистанция взгляда
5. "3д-направление 3д-точки1" = нормализация ("кватернион 3д-точки1" * new Vector3(0f, 0f, 1f))
6. Умножение кватерниона на вектор3 через определение оператора "умножение"
Скрытый текстpublic static Vector3 operator *(Quaternion rotation, Vector3 point) { float num = rotation.x * 2f; float num2 = rotation.y * 2f; float num3 = rotation.z * 2f; float num4 = rotation.x * num; float num5 = rotation.y * num2; float num6 = rotation.z * num3; float num7 = rotation.x * num2; float num8 = rotation.x * num3; float num9 = rotation.y * num3; float num10 = rotation.w * num; float num11 = rotation.w * num2; float num12 = rotation.w * num3; Vector3 result; result.x = (1f - (num5 + num6)) * point.x + (num7 - num12) * point.y + (num8 + num11) * point.z; result.y = (num7 + num12) * point.x + (1f - (num4 + num6)) * point.y + (num9 - num10) * point.z; result.z = (num8 - num11) * point.x + (num9 + num10) * point.y + (1f - (num4 + num5)) * point.z; return result; }
7. Нормализация вектора3
Скрытый текстpublic static Vector3 Normalize(Vector3 value) { float num = Vector3.Magnitude(value); Vector3 result; if (num > 1E-05f) { result = value / num; } else { result = Vector3.zero; } return result; } // Для Vector3.Magnitude(value); public static float Magnitude(Vector3 a) { return Mathf.Sqrt(a.x * a.x + a.y * a.y + a.z * a.z); } //-------------------------------------------------- // Еще переопределяющие операторы (пишу пачкой, а то я мог пропустить какой-нибудь) public static Vector3 operator +(Vector3 a, Vector3 b) { return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z); } public static Vector3 operator -(Vector3 a, Vector3 b) { return new Vector3(a.x - b.x, a.y - b.y, a.z - b.z); } public static Vector3 operator -(Vector3 a) { return new Vector3(-a.x, -a.y, -a.z); } public static Vector3 operator *(Vector3 a, float d) { return new Vector3(a.x * d, a.y * d, a.z * d); } public static Vector3 operator *(float d, Vector3 a) { return new Vector3(a.x * d, a.y * d, a.z * d); } public static Vector3 operator /(Vector3 a, float d) { return new Vector3(a.x / d, a.y / d, a.z / d); } public static bool operator ==(Vector3 lhs, Vector3 rhs) { return Vector3.SqrMagnitude(lhs - rhs) < 9.99999944E-11f; } public static bool operator !=(Vector3 lhs, Vector3 rhs) { return Vector3.SqrMagnitude(lhs - rhs) >= 9.99999944E-11f; }
Не уверен, что это правильно, надо переводить на C++ и проверять.
* Если в игре ось "вперед" не является Z, а другой осью Y, то new Vector3(0f, 1f, 0f)
-
Рис1. Пример рисования текста разными цветами
Скрипт Lua
Скрытый текстs=createForm() lv=createListView(s) lv.ViewStyle='vsReport' lv.RowSelect=true lv.HideSelection=false c=lv.Columns.add() c.Caption='C1'; c=lv.Columns.add() c.Caption='C2'; c=lv.Columns.add() c.Caption='C3'; for i=1,10 do l=lv.Items.add() l.Caption='bla'..i; l.SubItems.add('line '..i) l.SubItems.add('i*2='..i*2) end lv.OnCustomDrawItem=function(sender, ListItem, state, DefaultDraw) if ListItem.Index % 2 == 0 then sender.canvas.font.color=0x0000ff else sender.canvas.font.color=0x00ff00 end return true end lv.OnCustomDrawSubItem=function(sender, ListItem, SubItemIndex, state, DefaultDraw) if ListItem.Index % 3 == 0 then if SubItemIndex % 2 == 0 then sender.canvas.font.color=0xff0000 else sender.canvas.font.color=0x00ffff end else sender.canvas.font.color=0xffff00 end return true end
-
Скриншот. Сравнение main.lua версии CE 6.6 и celua.txt CE 6.7
В архиве ниже два файла описания CE Lua функций, классов. Файлы можно сравнить самостоятельно в любой программе (я сравнивал в NotePad++, плагин Compare). Без сравнения будет сложнее ориентироваться.
Compare Help Lua files CE 6.7.zip
Появились, если я правильно подсчитал 17 новых классов. 16 классов для работы с базой данных SQL(sqlite) и один CustomType, множество функций. Некоторые из них
Скрытый текстКопирование участка памяти между процесссами CE в таргет прочессом
Скрытый текстcopyMemory(sourceAddress: integer, size: integer, destinationAddress:integer SEMIOPTIONAL, Method:integer OPTIONAL): Copies memory from the given address to the destination address If no destinationAddress is given(or nil), CE will allocate a random address for you Method can be: nil/0: Copy from target process to target process 1: Copy from target process to CE Memory 2: Copy from CE Memory to target process 3: Copy from CE Memory to CE Memory Returns the address of the copy on success, nil on failure
Чтение метрик
Скрытый текстgetSystemMetrics(index): Retrieves the specified system metric or system configuration setting (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385.aspx)
Управление памятью
Скрытый текстallocateMemory(size, BaseAddress OPTIONAL, Protection OPTIONAL): Allocates some memory into the target process deAlloc(address, size OPTIONAL): Frees allocated memory createSection(size) : Creates a 'section' in memory mapViewOfSection(section, preferedBaseAddress OPTIONAL): Maps the section to memory unMapViewOfSection(baseaddress): Unmaps a section from memory
Новые поля шрифтов
Скрытый текстFont Class : (Inheritance: CustomFont->CanvasHelper->Object) createFont(): Returns a font object (default initialized based on the main ce window) properties Name: string Size: integer Height: integer Orientation: integer Pitch: string - 'fpDefault', 'fpVariable', 'fpFixed' Color: integer CharSet: integer Quality: string - 'fqDefault', 'fqDraft', 'fqProof', 'fqNonAntialiased', 'fqAntialiased', 'fqCleartype', 'fqCleartypeNatural' Style: string set - ['fsBold', 'fsItalic', 'fsStrikeOut', 'fsUnderline']
-
-
23 часа назад, krocki сказал:
Трейнер жрёт пямять...это что то новенькое!...компиляторы кривые что-ли!?
Если в течении работы CE трейнер забирает много памяти, то возможно скапливаться мусор. Через таймер очистка мусора решает проблему. Код я выше привел. Там закоментить строчки print, чтобы консоль не показывало.
-
2 часа назад, aliast сказал:
Кстати, он ещё и памяти жрёт... Баракудовский тренер 200 мб, мой 1,2 Гига! Это после 2 часов игры.
Можно попробовать прописать сборку мусора. Например, каждую минуту
Скрытый текстif(garbageTimer == nil) then garbageTimer = createTimer(nil, true) else garbageTimer.Enabled = true end garbageTimer.Interval = 60000 garbageTimer.OnTimer = function () print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) collectgarbage("restart") collectgarbage("collect") print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) end
-
9 часов назад, srg91 сказал:
Джеффри Фридл - Регулярные выражения (Mastering Regular Expressions).
Прикольно, надо будет почитать. Я часто костыляю с парсерами. Полезна. "Perl, PHP, Java, Python, Ruby, MySQL, VB.NET, C# (и других языках платформы .NET). Регулярные выражения позволят вам автоматизировать сложную и тонкую обработку текста. "
9 часов назад, srg91 сказал:К слову, @MasterGH, а как ты изучал C#? Особенно в разрезе с Unity?
C# я учил для работы с базами данных. Либо как софт (wpf), либо как веб (asp.net, silverlight). Книги, справочники, блоги, форумы. Собеседования, вакансии, что хотят работодатели, что я умел, что не умел... Пока я искал работу предложили работать с Unity временно и затем на постоянку у ИП. Начал и все пошло. Я удивлялся как все двигалось по физике, как рисовалось и все на C# и зарплату платят. Все нравилось. Все само запоминалось или записывал. Потом где-то через 4 года пошел в игровую студию. Работаю в ней уже второй год, а компании года три. Молодой коллектив в основном и компания по разработке игр начинающая. Я пришел в очень молодую компанию и мы растем. Я надеюсь будут игры, которые будет не стыдно показать. Пока то, что мы делаем хоть и имеет в сумме десятки миллионов установок, а то и сотни, если сложить разные сторы и маркеты, но пока игры очень короткие и по качеству не конкурируют с известными игровыми студиями в Новосибирске, я уже молчу про еще более известные.
-
6 минут назад, srg91 сказал:
Python
То-то я смотрю Lua скрипты пишешь. Если на работе — на Python... :)))
Интересно @SnedS91 тоже на Python, такие регулярки закручивает с легкостью ))
-
Если судить по мне, то мне тяжело давалось программирование. Как я не пытался понять C++ у меня никак не получилось или мне не везло на книги. Но когда я вот эту книгу, которую посоветовал нам препорд, прочел, то у меня все пошло по нарастающей. Её прочитал когда был на первом курсе универа (1-ый или второй семестр)
Скрытый текстОна читается на одном дыхании и не сложно и не особо легко, если вообще о программирование не знал. Процедурное программирование, типы данных, циклы и даже ООП в конце книги. Я эту книгу обожаю, хотя на паскале или Дельфи очень давно ничего не писал
-
Пытаться искать рабочий адрес координат float, double тип, когда поднимаешься или опускаешься танком. Если такой есть работать с ним.
Проверить, что сетевые клиенты видят изменения, если не видят значит движение танка происходит на серверной части по вводу, а всем клиентам от сервера раздаются копии позициий танков.
Проверить мастер-сервер или мастер-клиент, кто синхронизирует положения танков. Если мастер-клиент, что маловероятно, то можно менять позиции всех танков на машине мастер клиента. Если мастер-сервер, то никто кроме сервера не может прямо влиять на положения танков, лишь косвенно отправляя данные ввода мастер-серверу.
Новый раздел по совместной разработке
in Общение
Опубликовано
@keng @partoftheworlD спасибо за ответы. @partoftheworlD респект за столь развернутый ответ.
Совсем не обязательно писать про каждый пункт. Можно пару слов написать и я буду лично рад.
Лично мне тема очень интересна. Даже, когда мы сами не можем писать код по разным причинам, то мы можем участвовать в процессе.
1. Идеями
2. Поддержкой
3. Подсказками
4. Помочь с направлением или организацией
Главное общение, даже если что-то не получится. Главное попытаться.