Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Сообщения, опубликованные MasterGH

  1. @keng @partoftheworlD спасибо за ответы. @partoftheworlD респект за столь развернутый ответ.

     

    Совсем не обязательно писать про каждый пункт. Можно пару слов написать и я буду лично рад.

    Лично мне тема очень интересна. Даже, когда мы сами не можем писать код по разным причинам, то мы можем участвовать в процессе.

     

    1. Идеями

    2. Поддержкой

    3. Подсказками

    4. Помочь с направлением или организацией

     

    Главное общение, даже если что-то не получится. Главное попытаться.

  2. @keng

    Я создал твинка и дал ему права, как тебе. В девелоп пуш прошел.

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

     

    4 минуты назад, srg91 сказал:

     

     

    Мне не удалось (если я всё правильно сделал):

     

     

    Вообще странно очень.

    Пора мне. Завтра рано на работу. Не высыпаюсь неделями.

  3. Интересны ваши предложения:

     

    1. Идеи, что можно совместно разрабатывать в общих репозиториях? Движки, плагины, трейнеры, даже игры?

    2. Как считаете совместно что-то делать в репозиториях интересно? Пару слов

    3. Предложения как назвать новый раздел и где его можно разместить?

    4. Что может быть в названии тем и что в содержании?

    5. Чей хостинг git? (gitlab, github, bitbucket, etc..)

    6. Определенный хостинг git для всех или по желанию каждый свой берет?

    7. Дать возможность внести пожертвования? Например, в подписи или в профиле или еще где-то

    8. Кто хотел бы участвовать?  На вскидку человек шесть. Трое на Питоне хотели, трое на плагине CE. Дальше может быть еще куча проектов, а вдруг?

     

    Еще будет нужно разрешение администратора форума :)

     

    Пока примеры названия и размещения раздела

    Скрытый текст
    
    Территория Разработчиков
        Наши Разработки
            Совместная работа с репозиториями
                [Темы]
                    - Разрботка чего-то...
                    - Разрботка чего-то...
                    - Разрботка чего-то...

    Здесь у нас все скрыто от не разработчиков. Если возможность доната делать, то можно делать разработку открытой. Например, здесь.

    
    Программирование
        Совместная работа с репозиториями
            [Темы]
                - Разрботка чего-то...
                - Разрботка чего-то...
                - Разрботка чего-то...

    Могу предложить создать и новую категорию, но пока не придумал разделы.

     

     

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

  4. 15 минут назад, keng сказал:

    Всем админа раздавать точно не стоит. Можно работать через стандартный fork+pullrequest flow, но меня смущает, что в develop на данный момент у любого есть доступ на запись - @MasterGH, ты сейчас это поставил или вчера так же было (Settings -> Workflow -> Branch permissions -> develop -> Write Access: Everybody)?

     

    Админ права только будут у вас.

    Я поставил эти права на всех еще вчера. Почему смущает?

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

    ----

    upd:  Я получил твои изменения. Смержил

    upd: текущие настройки

    Скрытый текст

    1.png

     

  5. 8 минут назад, keng сказал:

    db очень уж неохотно принимает пулл-реквесты

     

    Думаю, что нет необходимости.

     

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

  6. Репозиторий

     

    Созданы две ветки

    1. master - ветвь релизов

    2. develop - ветвь разработчиков

     

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

     

    У кого есть необходимость исправлять код плагина, можете попробовать. Для этого нужно.

     

    1. Регистрируемся на bitbucket;

    2. Качаем клиент SourceTree;

    3. Клонируем репозиторий через клиент и переключаемся на последний коммит ветви develop;

    4. Дальше вы можете делать сами любые изменения в ветви develop, после чего нужно отправить изменения на сервис;

    5. В этой теме можно описаться об изменениях;

    6. По возможности буду мержить с мастером и тестить;

     

    Если умеете работать с git-flow (писал о нем в блоге) и терминалом, то можно и с ним.

     

    Когда займусь плагином пока не известно. Ничего не могу обещать.

     

     

  7. Если надо чтобы синхронно вкладки переключались

    UDF1.CEPageControl2.OnChange =
      function (sender)
        UDF1.CEPageControl2.TabIndex =
         UDF1.CEPageControl1.TabIndex
      end

    Если я не так понял вопрос, то попробуй переключать вкладки через TabIndex как в примере выше. Смена вкладок вызывает OnChange, на которую можно подписаться как в примере выше.

  8. Могу дать сырое решение

     

    1. Нажимаем на "H" - снимаются по 10-ке плохие параметры (усталость, голод и прочее)

    2. Нажимаем на "J" - добавляется 1 очко способностей

     

    Много раз нажимаем на H и J и параметры обновляются у всех персонажей.

     

    Dead bermuda4.jpg

     

    При установке указать правильный путь до 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);
            }        
          }
        }     
      } 
    }

     

     

    Dead bermuda.jpg Dead bermuda2.jpg  Dead bermuda3.jpg

    Cheat.dll

    Dead In Bermuda.CT

  9. Можешь поискать в сканере памяти эейлеров угол вертикальной оси поворачивая персонажа влево и вправо. Тогда выйдешь на три адреса 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.

  10. Готовый вариант не дам, но может поможет

     

    Если 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)

  11. OnCustomDrawItem.png

    Рис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 

     

     

    Источник

  12. CompareNotepad++.png

    Скриншот. Сравнение 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']

     

     

     

     

  13. 23 часа назад, krocki сказал:

    Трейнер жрёт пямять...это что то новенькое!...компиляторы кривые что-ли!?

     

    Если в течении работы CE трейнер забирает много памяти, то возможно скапливаться мусор. Через таймер очистка мусора решает проблему. Код я выше привел. Там закоментить строчки print, чтобы консоль не показывало.

  14. 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

     

     

  15. 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 года пошел в игровую студию. Работаю в ней уже второй год, а компании года три. Молодой коллектив в основном и компания по разработке игр начинающая. Я пришел в очень молодую компанию и мы растем. Я надеюсь будут игры, которые будет не стыдно показать. Пока то, что мы делаем хоть и имеет в сумме десятки миллионов установок, а то и сотни, если сложить разные сторы и маркеты, но пока игры очень короткие и по качеству не конкурируют с известными игровыми студиями в Новосибирске, я уже молчу про еще более известные.

  16. Если судить по мне, то мне тяжело давалось программирование. Как я не пытался понять C++ у меня никак не получилось или мне не везло на книги. Но когда я вот эту книгу, которую посоветовал нам препорд, прочел, то у меня все пошло по нарастающей. Её прочитал когда был на первом курсе универа (1-ый или второй семестр)

    Скрытый текст

    11519.jpg

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

  17. Пытаться искать рабочий адрес координат float, double тип, когда поднимаешься или опускаешься танком. Если такой есть работать с ним.

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

     

    mp34.gif

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

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.