|
|
|
|
[ВАЖНО] Общалка кодеров
|
|
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
Блокировки:
| Думаю это равносильно тому, чтобы не создавать четыре таймера, когда можно обойтись одним
|
|
|
|
Hexing | Дата: Понедельник, 02 Апреля 2012, 19:02:48 | Сообщение # 30 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) Думаю это равносильно тому, чтобы не создавать четыре таймера, когда можно обойтись одним нет, ты не понимаешь о чём мы, мы о реюзабельности куска кода, причём меньше кода после парсинга явно не станет, а в данном случае так макрос одноразовый, сир имеет в виду использование эдакой конструкции для нес-ких целей одновременно, что сгладит нечитабельность кода, и даже сделает код более упорядоченным, но по мне это не удобно, уж лучше писать всё как есть, хотя каждому своё
|
|
|
|
Ty3uK | Дата: Понедельник, 02 Апреля 2012, 19:19:16 | Сообщение # 31 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Понял, я как обычно не в теме -_-
|
|
|
|
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
Блокировки:
| хм, я уже сплю, плохо понимаю, ведь это всего лишь структура, ну да ладно, а ты знаешь что с тобой не интересно? ты всегда прав
|
|
|
|
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 не подходи
|
|
|
|
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 я еще нуб в таких вещах
|
|
|
|
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?
|
|
|
|
[DUОS] | Дата: Суббота, 07 Июля 2012, 11:53:15 | Сообщение # 41 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Ty3uK, Jass2 автору кода религия не позволяет использовать? D:
|
|
|
|
Ty3uK | Дата: Суббота, 07 Июля 2012, 11:58:12 | Сообщение # 42 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| жажда знаний, а не религия
|
|
|
|
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()); }
}
|
|
|
|
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) код приемлем?
|
|
|
|
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 Поставил Запустил Написал простейшее приложение на плюсах Снес студию Дискасс
|
|
|
|
SirNikolas | Дата: Среда, 03 Октября 2012, 12:07:04 | Сообщение # 49 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| http://wxdsgn.sourceforge.net
|
|
|
|
Ty3uK | Дата: Среда, 03 Октября 2012, 12:08:39 | Сообщение # 50 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| я знаю
|
|
|
|
|
|
|
|
|
|
|