Сейчас 10:30:08 Суббота, 2 июля, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Общалка кодеров (Обмен опытом | Обсуждение проблем)
[ВАЖНО] Общалка кодеров
HexingДата: Понедельник, 02 Апреля 2012, 18:08:55 | Сообщение # 26
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (SirNikolas)
Точно, забыл про эту штуку. Тогда вот так:
Code
set items.value = pair_##int##_real.create()

угу, а зачем ты всё макрами нагрузил? они же 1 раз юзаются, не проще ли самому написать структуры? короче же будет


 

SirNikolasДата: Понедельник, 02 Апреля 2012, 18:22:37 | Сообщение # 27
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Повторное использование кода)

 

HexingДата: Понедельник, 02 Апреля 2012, 18:37:07 | Сообщение # 28
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
ой, ты же не драйвер для принтера пишешь, а скриптовый кусок символов, который можно написать за 5 минут, так стоит ли так извращаться макрами? но вообще это наверное хороший тон, писать реконструктивный многоразовый гибкий код...

 

Ty3uKДата: Понедельник, 02 Апреля 2012, 18:40:04 | Сообщение # 29
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Думаю это равносильно тому, чтобы не создавать четыре таймера, когда можно обойтись одним :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

HexingДата: Понедельник, 02 Апреля 2012, 19:02:48 | Сообщение # 30
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (Ty3uK)
Думаю это равносильно тому, чтобы не создавать четыре таймера, когда можно обойтись одним

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


 

Ty3uKДата: Понедельник, 02 Апреля 2012, 19:19:16 | Сообщение # 31
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Понял, я как обычно не в теме -_-

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Понедельник, 02 Апреля 2012, 19:21:11 | Сообщение # 32
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Hexing)
причём меньше кода после парсинга явно не станет
Если кому-то еще нужна будет пара <int, real>, то станет. :)


 

HexingДата: Понедельник, 02 Апреля 2012, 19:25:33 | Сообщение # 33
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (SirNikolas)
Если кому-то еще нужна будет пара <int, real>, то станет.

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


 

SirNikolasДата: Понедельник, 02 Апреля 2012, 19:26:51 | Сообщение # 34
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Я про то, что он будет использовать уже готовые массивы, а не создавать свои.

 

HexingДата: Понедельник, 02 Апреля 2012, 19:30:40 | Сообщение # 35
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
хм, я уже сплю, плохо понимаю, ведь это всего лишь структура, ну да ладно, а ты знаешь что с тобой не интересно? ты всегда прав idiot

 

Ty3uKДата: Пятница, 29 Июня 2012, 12:26:01 | Сообщение # 36
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Code
library SomeVariables
{
     #define dbg(msg) = call DoNothing();
      
     #if DEBUG
         #setdef dbg(msg) = call BJDebugMsg(msg);
     #endif
}


Не подходит вставка DoNothing(), как можно выпилить дефайн и все объявления? #undef не подходи


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Пятница, 29 Июня 2012, 15:57:11 | Сообщение # 37
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
library Debug {
    define <call dbg>(msg) = dbg(msg);
    define dbg(msg) = static if DEBUG_MODE { BJDebugMsg(msg); }
}


 

Ty3uKДата: Пятница, 29 Июня 2012, 16:08:24 | Сообщение # 38
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
спасибо большое :3
я еще нуб в таких вещах


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

DiabfallДата: Суббота, 07 Июля 2012, 07:51:34 | Сообщение # 39
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
сегодня гуд кодеру 19. С ДР! Желаю удачи.
p.s. Возможно таки ты напишешь на Jass ИИ, который пройдет варовский Тест Тьюринга.)
 

Ty3uKДата: Суббота, 07 Июля 2012, 09:44:50 | Сообщение # 40
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
поздравил в репутации (:

Добавлено (07 Июль 2012, 09:44:50)
---------------------------------------------

Code
scope FreezingShoot
{

     #define
     {
         <trigger gg_trg_Freezing_Shoot = null>;
         private isEnemy(t, u) = IsUnitEnemy(t, GetOwningPlayer(u));
     }
     #include "cj_types_priv.j";
      
     private struct FS
     {
         static unit caster;
         static unit array dummy[3];
         static int count = 3;
         static real dist = 0.;
          
         static void Timer()
         {
             var t = GetExpiredTimer();
             FS s = LoadInteger(hash, GetHandleId(t), 0);
             real x, y;
             if (s.dist <= 750.)
             {
                 for (int i = 0; i < 3; i++)
                 {
                     var angle = GetUnitFacing(s.dummy[i]) * .0174532;
                     x = GetWidgetX(s.dummy[i]) + 25. * Cos(angle);
                     y = GetWidgetY(s.dummy[i]) + 25. * Sin(angle);
                     SetUnitPosition(s.dummy[i], x, y);
                     for (unit target; UnitsInRange(x, y, 80.) use temp)
                     {
                         if (isEnemy(s.caster, target))
                         {
                             UnitDamageTarget(s.caster, target, 100., true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS);
                             delete AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl", x, y);
                             DummycastToTarget(s.caster, target, 'A001', 852075);
                             RemoveDummy(s.dummy[i]);
                             s.count -= 1;
                         }
                     }
                 }
                 s.dist += 25.;
             } elseif (s.dist > 750. || s.count <= 0) {
                 for (int i = 0; i < 3; i++)
                 {
                     if (s.dummy[i] != null)
                     {
                         x = GetWidgetX(s.dummy[i]);
                         y = GetWidgetY(s.dummy[i]);
                         delete AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl", x, y);
                         RemoveDummy(s.dummy[i]);
                     }
                 }
                 FlushChildHashtable(hash, GetHandleId(t));
                 PauseTimer(t);
                 delete t, s;
             }
             flush t;
         }
          
         static void Init(unit caster, real tX, real tY)
         {
             new FS s, timer t;
             s.caster = GetTriggerUnit();
             var angle = Atan2(tY - GetWidgetY(s.caster), tX - GetWidgetX(s.caster)) * 57.295;
             var x = GetWidgetX(s.caster);
             var y = GetWidgetY(s.caster);
             for (int i = 0; i < count; i++)
             {
                 s.dummy[i] = CreateDummy(GetOwningPlayer(caster), "Abilities\\Weapons\\ColdArrow\\ColdArrowMissile.mdl", .7, x, y, 100., angle);
                 angle -= 20.;
             }
             SaveInteger(hash, GetHandleId(t), 0, s);
             TimerStart(t, .04, true, function thistype.Timer);
             flush t;
         }
          
     }
      
     callback onUnitSpellEffect('A000')
     {
         FS.Init(GetTriggerUnit(), GetSpellTargetX(), GetSpellTargetY());
     }

}

Не муишно. Why?


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

[DUОS]Дата: Суббота, 07 Июля 2012, 11:53:15 | Сообщение # 41
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Ty3uK,
Jass2 автору кода религия не позволяет использовать? D:


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

Ty3uKДата: Суббота, 07 Июля 2012, 11:58:12 | Сообщение # 42
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
жажда знаний, а не религия

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Суббота, 07 Июля 2012, 17:57:35 | Сообщение # 43
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Ty3uK)
static unit caster;
static unit array dummy[3];
static int count = 3;
static real dist = 0.;
Так у тебя они статичные все.


 

Ty3uKДата: Суббота, 07 Июля 2012, 20:39:49 | Сообщение # 44
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
точно, спасибо :3

Добавлено (07 Июль 2012, 20:39:49)
---------------------------------------------
Финальная редакция кода. Не говно?

Code
scope FreezingShoot
{

     #define
     {
         <trigger gg_trg_Freezing_Shoot = null>;
         private isEnemy(t, u) = IsUnitEnemy(t, GetOwningPlayer(u)) && GetWidgetLife(u) > .405;
     }
     #include "cj_types_priv.j";
      
     private struct FS
     {
         unit caster;
         unit array dummy[3];
         static constant int count = 3;
         real dist = 0.;
          
         static void Timer()
         {
             var t = GetExpiredTimer();
             FS s = LoadInteger(hash, GetHandleId(t), 0);
             real x, y;
             if (s.dist <= 750.)
             {
                 for (int i = 0; i < s.count; i++)
                 {
                     var angle = GetUnitFacing(s.dummy[i]) * .0174532;
                     x = GetWidgetX(s.dummy[i]) + 25. * Cos(angle);
                     y = GetWidgetY(s.dummy[i]) + 25. * Sin(angle);
                     SetUnitPosition(s.dummy[i], x, y);
                     for (unit target; UnitsInRange(x, y, 80.) use temp)
                     {
                         if (isEnemy(s.caster, target))
                         {
                             UnitDamageTarget(s.caster, target, 100., true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS);
                             delete AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl", x, y);
                             DummycastToTarget(s.caster, target, 'A001', 852075);
                             RemoveDummy(s.dummy[i]);
                         }
                     }
                 }
                 s.dist += 25.;
             } elseif (s.dist > 750. || s.count <= 0) {
                 for (int i = 0; i < s.count; i++)
                 {
                     if (s.dummy[i] != null)
                     {
                         x = GetWidgetX(s.dummy[i]);
                         y = GetWidgetY(s.dummy[i]);
                         delete AddSpecialEffect("Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl", x, y);
                         RemoveDummy(s.dummy[i]);
                     }
                 }
                 FlushChildHashtable(hash, GetHandleId(t));
                 PauseTimer(t);
                 delete t, s;
             }
             flush t;
         }
          
         static void Init(unit caster, real tX, real tY)
         {
             new FS s, timer t;
             s.caster = GetTriggerUnit();
             var angle = Atan2(tY - GetWidgetY(s.caster), tX - GetWidgetX(s.caster)) * 57.295;
             var x = GetWidgetX(s.caster);
             var y = GetWidgetY(s.caster);
             for (int i = 0; i < s.count; i++)
             {
                 s.dummy[i] = CreateDummy(GetOwningPlayer(caster), "Abilities\\Weapons\\ColdArrow\\ColdArrowMissile.mdl", .7, x, y, 100., angle);
                 angle -= 20.;
             }
             SaveInteger(hash, GetHandleId(t), 0, s);
             TimerStart(t, .04, true, function thistype.Timer);
             flush t;
         }
          
     }
      
     callback onUnitSpellEffect('A000')
     {
         FS.Init(GetTriggerUnit(), GetSpellTargetX(), GetSpellTargetY());
     }

}


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Воскресенье, 08 Июля 2012, 11:12:57 | Сообщение # 45
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
К статичным переменным следует обращаться по имени структуры: FS.count. Если же дело происходит в самой структуре, можно thistype.count или просто count.
Не знаю, почему JASSHelper переваривает такую запись, как у тебя.

Еще можно лямбду заюзать.


 

Ty3uKДата: Воскресенье, 08 Июля 2012, 12:59:37 | Сообщение # 46
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
SirNikolas, спасибо, поправлю (:
То есть в целом (я со стороны vJass'a) код приемлем?


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Воскресенье, 08 Июля 2012, 13:07:03 | Сообщение # 47
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Более чем. Только я бы написал не isEnemy, а, скажем, TargetCond.

 

Ty3uKДата: Вторник, 02 Октября 2012, 17:34:08 | Сообщение # 48
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
SirNikolas, ну тут уже личные предпочтения (:
Спасибо за помощь :3

Добавлено (02 Октября 2012, 17:34:08)
---------------------------------------------
Сегодня скачал Microsoft Visual Studio 2012



Поставил
Запустил
Написал простейшее приложение на плюсах
Снес студию


Дискасс trollface


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Среда, 03 Октября 2012, 12:07:04 | Сообщение # 49
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
http://wxdsgn.sourceforge.net

 

Ty3uKДата: Среда, 03 Октября 2012, 12:08:39 | Сообщение # 50
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
я знаю :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [ВАЖНО] Общалка кодеров (Обмен опытом | Обсуждение проблем)
Поиск:

Copyright © 2006 - 2022 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz