|
|
|
|
[JASSфак] Лекция 2. Локальные переменные.
|
|
Akvarium | Дата: Суббота, 21 Ноября 2009, 17:53:30 | Сообщение # 51 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| Люди. Подскажите как JNGP поставить. В папку с варом все кинул. Работет. Проверку карте не делает(
|
|
|
|
[DUОS] | Дата: Суббота, 21 Ноября 2009, 18:07:48 | Сообщение # 52 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (Akvarium) Проверку карте не делает( Akvarium, Карту пускать онли обычным варом...Добавлено (21-11-2009, 18:07) --------------------------------------------- Даю вам ещё одну статью на заметку. Quote (GooGLe) GetInventoryIndexOfItemTypeBJ Она самая.
|
|
|
|
Akvarium | Дата: Суббота, 21 Ноября 2009, 18:08:39 | Сообщение # 53 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| Quote (|DUОS|) Карту пускать онли обычным варом... ?! Я в редакторе этом жду на проверку. Пробовал простым WE открыть. Карту открыл. Но при запуске выдал меню вара. При завпуску из JGNP выдает вот че: ЗЫ: Ты вобще GUIфак забросил?
Сообщение отредактировал Akvarium - Суббота, 21 Ноября 2009, 18:17:27 |
|
|
|
Djimm | Дата: Суббота, 21 Ноября 2009, 18:19:16 | Сообщение # 54 |
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
| Quote (Akvarium) Но при запуске выдал меню вара. Если такое произошло, то где то в триггерах ошибка. У меня такое бывало уже Кстати, у меня тест карты через JNPG нормально делает. Бывает иногда гдюк, что при проверке jass кода пишет ошибку pjass'а, а потом просто не запускает проверку карты, но бывает такое редко (всего пока 2 раза было у меня). Quote (|DUОS|) Карту пускать онли обычным варом... А почему??? JNPG обычный вар запускает вроде бы как.
|
|
|
|
[DUОS] | Дата: Суббота, 21 Ноября 2009, 18:25:24 | Сообщение # 55 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (Djimm) JNPG обычный вар запускает вроде бы как. Djimm, Неа. Он New Gen WarCraft пускает...
|
|
|
|
Akvarium | Дата: Суббота, 21 Ноября 2009, 18:28:33 | Сообщение # 56 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| HEELLPPP!!!!...Quote (Djimm) в триггерах ошибка WE Ниче не сказал. Вкл/выкл триг и ниче не сказал. Я эту карту где то 6 месяцов лепил О_о. С дуру открыл этим чтоб он провалился. Терь и норм вар не видит!!!!АААА!!!!
Сообщение отредактировал Akvarium - Суббота, 21 Ноября 2009, 18:32:47 |
|
|
|
Djimm | Дата: Суббота, 21 Ноября 2009, 18:37:26 | Сообщение # 57 |
5 уровень
Группа: Проверенные
Сообщений: 117
Награды: 0
Репутация: 20
Блокировки:
| Quote (|DUОS|) Он New Gen WarCraft пускает... А разница обычного вара и New Gen'a?? Только что он в окне открывается, хотя это в настройках меняеться. Или тем, что в нем читы не работают?? Akvarium, ты через 1.24 делал?? JNPG как 1.23 открывает вроде бы. Если ты что то поменял через 1.23, то он мог на 1.24 не прочесть карту.
|
|
|
|
Akvarium | Дата: Суббота, 21 Ноября 2009, 18:39:26 | Сообщение # 58 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| Djimm, я ее начал делать на 1.21 и продолжил делать на 1.24b. Сейчас стоит 1.24b КАК СПАСТИ ВЕРСИЮ?! А то трындец...
|
|
|
|
GooGLe | Дата: Суббота, 21 Ноября 2009, 20:17:02 | Сообщение # 59 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Блокировки:
| Quote (|DUОS|) Объявлять их нужно в самом начале функции, причём до глобальных переменных. Локальные переменные объявляются как аргументы функций или внутри тел функций до операторов. Quote (|DUОS|) local real r - реальная Вещественная какой точности, знаем?
|
|
|
|
[DUОS] | Дата: Суббота, 21 Ноября 2009, 21:24:50 | Сообщение # 60 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Akvarium, common.j засунуть...
|
|
|
|
Сорнемус | Дата: Воскресенье, 22 Ноября 2009, 01:55:24 | Сообщение # 61 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Щяс пойдёт жесткая волна оффтопа: Тэк, чтот я отстал от жизни сайта... 1. Кто состоит в команде W.Info? 2. Котофиг бунтует? 3. Скоро штурмуем ХГМ? D: Добавлено (22-11-2009, 01:55) --------------------------------------------- 4. "Создатели миров" это Б.ру?
Сообщение отредактировал Сорнемус - Воскресенье, 22 Ноября 2009, 02:43:36 |
|
|
|
Akvarium | Дата: Воскресенье, 22 Ноября 2009, 10:42:28 | Сообщение # 62 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| Все!!!Нашел в чем была неисправность!Всем спс..) Версия спасена) уф....
Сообщение отредактировал Akvarium - Воскресенье, 22 Ноября 2009, 11:33:25 |
|
|
|
0x4453 | Дата: Воскресенье, 22 Ноября 2009, 16:24:56 | Сообщение # 63 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
| GooGLe, я ввёл такие усовершенствования:убрал цикл,занёс boolexpr в локалку вышло такое: Code function InitTrig_A takes nothing returns nothing local integer i = 0x00 local boolexpr filter = null local trigger t = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x04), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x05), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x06), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x07), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x08), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x09), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerAddAction( t, function Trig_A_Actions ) call DestroyBoolExpr(filter) set filter = null set t = null endfunction Akvarium, открой wehack.lua и снеси следующий код: Code if rtc_enabled.checked then -- local args = string.gsub(cmdline,"\"([^\"]*)\" ","") -- wehack.messagebox(args,"Grimoire",false) -- cmdline = "startwar3.bat " .. args
local testmaparglist = argsplit(cmdline) local len = table.getn(testmaparglist) if len > 2 then cmdline = "startwar3.bat" --if not grim.exists(cmdline) then -- cmdline = "NewGen Warcraft.exe" -- NewGen version doesn't use batch files --end for i = 2, len do if (i < len) and (usetestmapconf) then local arglen = string.len(testmaparglist[i+1]) if testmaparglist[i] == "-loadfile" and arglen > 3 then local ext = string.lower(string.sub(testmaparglist[i+1],arglen-4+1)) if ext == ".w3m" or ext == ".w3x" then local substitute = wehack.setupwgcfile(testmaparglist[i+1]); if (substitute ~= testmaparglist[i+1]) then testmaparglist[i+1] = "\"" .. substitute .. "\"" end end end end cmdline = cmdline .. " " .. testmaparglist[i] end end end ртц само собой не будет,но проверять можно будет(на себе проверял - работает)Добавлено (22-11-2009, 16:22) --------------------------------------------- открывать через текстовой редактор Добавлено (22-11-2009, 16:24) --------------------------------------------- GooGLe, хотя нет,даже так: Code function InitTrig_A takes nothing returns nothing local integer i = 0x00 local boolexpr filter = null local trigger t = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent(t, Player(0x00), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x01), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x02), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x03), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x04), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x05), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x06), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x07), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x08), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x09), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), ConvertPlayerUnitEvent(20), filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), ConvertPlayerUnitEvent(20), filter) call TriggerAddAction( t, function Trig_A_Actions ) call DestroyBoolExpr(filter) set filter = null set t = null endfunction
|
|
|
|
Akvarium | Дата: Воскресенье, 22 Ноября 2009, 16:42:22 | Сообщение # 64 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| 0x4453, спс)))Проверяет)))
|
|
|
|
GooGLe | Дата: Воскресенье, 22 Ноября 2009, 19:50:54 | Сообщение # 65 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Блокировки:
| Функцию GetInventoryIndexOfItemTypeBJ можешь не переделывать, там примерно то же, что и в моем примере. В стиле MaSer. А в моем примере единственное, что нужно было сделать, - перенести exitwhen i>0x0f в позицию между set i = i + 0x01 и loop. Потому как при первом проходе нефиг проверку выполнять. Разворачивать цикл неправильно. Код выполняется однократно при инициализации карты, значит оптимизировать нужно прежде всего по длине кода. Заменять фильтр на локалку обязательно, когда этот фильтр есть. А когда его нет (null), то null и надо ставить. Если на локалку поменял в перспективу, то изволь откомментить код. Твоя замена константы EVENT_PLAYER_UNIT_DEATH, которая вычисляется однажды, на 16 вызовов функции - глупость. (Сама функция тоже глупость близов.)
|
|
|
|
0x4453 | Дата: Воскресенье, 22 Ноября 2009, 21:39:04 | Сообщение # 66 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
| Quote (GooGLe) Заменять фильтр на локалку обязательно, когда этот фильтр есть. А когда его нет (null), то null и надо ставить. Если на локалку поменял в перспективу, то изволь откомментить код. даже null`евой boolexpr может вызвать утечку Quote (GooGLe) Разворачивать цикл неправильно. Код выполняется однократно при инициализации карты, значит оптимизировать нужно прежде всего по длине кода. а разве он не выполняется при срабатывании события? итого - цикл в данном случае лучше? Quote (GooGLe) Твоя замена константы EVENT_PLAYER_UNIT_DEATH, которая вычисляется однажды, на 16 вызовов функции - глупость. (Сама функция тоже глупость близов.) тогда замена константы не имеет смысла? Quote (GooGLe) А в моем примере единственное, что нужно было сделать, - перенести exitwhen i>0x0f в позицию между set i = i + 0x01 и loop. Потому как при первом проходе нефиг проверку выполнять. буду знать,спасибо итого:очередной раз понимаю что надо ещё учиться и учиться но тут как бы школа,и спасибо ещё раз за объяснения некоторых вещнй Добавлено (22-11-2009, 21:39) --------------------------------------------- вещей*
|
|
|
|
GooGLe | Дата: Понедельник, 23 Ноября 2009, 10:27:10 | Сообщение # 67 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Блокировки:
| Quote (0x4453) даже null`евой boolexpr может вызвать утечку И такая пакость уже не удивляет. Обоснуй кодом. Quote (0x4453) а разве он не выполняется при срабатывании события Нет, в потоке main. Quote (0x4453) но тут как бы школа Ты ведешь себя не как ученик, а как я, а меня и так две.
|
|
|
|
0x4453 | Дата: Понедельник, 23 Ноября 2009, 11:27:55 | Сообщение # 68 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
| Quote (GooGLe) И такая пакость уже не удивляет. Обоснуй кодом. проверял на основе этого кода с подсчётом хэндлов без занесения в локалку доходило до 300 и падало на 280,а с локалкой доходило до 250 и возвращалось на 200,+ вар кушал на 0,5к кб меньше хотя возможно это и не так
|
|
|
|
HAPKOMAH | Дата: Понедельник, 23 Ноября 2009, 12:04:47 | Сообщение # 69 |
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
| Код давай, блин.
|
|
|
|
0x4453 | Дата: Понедельник, 23 Ноября 2009, 13:05:22 | Сообщение # 70 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
| HAPKOMAH, выше посты читать умеем?
|
|
|
|
Сорнемус | Дата: Понедельник, 23 Ноября 2009, 15:16:21 | Сообщение # 71 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Когда будет 3 урок? Добавлено (23-11-2009, 15:16) --------------------------------------------- Кстати, надо выставить оценки в дневник =)
|
|
|
|
[DUОS] | Дата: Понедельник, 23 Ноября 2009, 15:47:08 | Сообщение # 72 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| 3-й урок - сегодня. Quote (Сорнемус) Кстати, надо выставить оценки в дневник =) Я выставлю после того, как дам вам контрольную...
|
|
|
|
Сорнемус | Дата: Понедельник, 23 Ноября 2009, 16:08:18 | Сообщение # 73 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Quote (|DUОS|) Я выставлю после того, как дам вам контрольную... А, ну да, ну да)
|
|
|
|
HAPKOMAH | Дата: Вторник, 24 Ноября 2009, 22:08:39 | Сообщение # 74 |
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
| Code function InitTrig_A takes nothing returns nothing local integer i = 0x00 local boolexpr filter = null local trigger t = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x04), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x05), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x06), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x07), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x08), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x09), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, filter) call TriggerAddAction( t, function Trig_A_Actions ) call DestroyBoolExpr(filter) set filter = null set t = null endfunction Code function InitTrig_A takes nothing returns nothing local integer i = 0x00 local boolexpr filter = null local trigger t = CreateTrigger( ) call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x04), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x05), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x06), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x07), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x08), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x09), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x0A), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x0B), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x0C), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x0D), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x0E), EVENT_PLAYER_UNIT_DEATH, null) call TriggerRegisterPlayerUnitEvent(t, Player(0x0F), EVENT_PLAYER_UNIT_DEATH, null) call TriggerAddAction( t, function Trig_A_Actions ) call DestroyBoolExpr(filter) set filter = null set t = null endfunction Абсолютно идентичны в плане утечек.
|
|
|
|
Сорнемус | Дата: Вторник, 24 Ноября 2009, 22:52:47 | Сообщение # 75 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Quote (HAPKOMAH) Абсолютно идентичны в плане утечек. Почти абсолютно идентичны вобще.Добавлено (24-11-2009, 22:52) --------------------------------------------- Обьясние, мне, непонятливому, зачем нужно: Code local integer i = 0x00 local boolexpr filter = null
Сообщение отредактировал Сорнемус - Вторник, 24 Ноября 2009, 22:48:56 |
|
|
|
|
|
|
|
|
|
|