Сейчас 11:30:22 Пятница, 29 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Bru  
Форум о Warcraft 3 » Прочее » Отвал » [Jass] Урок 3. Начинки функций. common.j и blizzard.j
[Jass] Урок 3. Начинки функций. common.j и blizzard.j
H_A_PKДата: Четверг, 09 Декабря 2010, 00:39:53 | Сообщение # 1
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Начинки функций. common.j и blizzard.j



Сегодня мы рассмотрим функции, а точнее их начинки и научимся определять к какому типу принадлежит функция.
Существует два вида функций, а - это native и bj.
native - не долго думая, зная английский язык слово native означает "родная" т.е. функция родная движку варкрафта, она не имеют начинки, хотя нет имеет, но не в виде жасса, а ассемблера.
Quote (Разарт)
У нативок есть код, но вы настолько тупы, что даже если я вам скажу что их можно посмотреть в game.dll, вы спросите "почему у меня блокнот кракозябры выдаёт?

Пример нативки:

bj - а именно blizzard.j функции имеющие начинку.
Пример:

Начинка - это внутренности функции, те действия которые она вызывает в последствии вызова самой функции. Так что нам будет проще избавить начинку от это функции, но не всегда это проще;)



Но не каждая функция с начинкой имеет в конце названия такое клеймо как BJ.
Начинка в каждой функции своя, будто тонна кода или вызов одной лишь функции или тонна кода которая также имеет начинку.
Как узнать начинку той или иной функции ? Жаль, но обыкновенный ВЕ нам в этом не поможет. Необходим JNGP ну или JassCraft, можно открыть в блокноте файл в папке blizzard.j.
Покажу на примере JassCraft'a:
Выберем интересующую нам функцию из Native List и снизу мы увидим её начинку, если начинка начинается со слова "native"
функция нативная и начинки мы так и не увидим, а если с "function" то имеет и собственно мы её и видим.

В JNGP можно узнать начинку, зажав ctrl и щёлкнуть по интересующей нами функции, ну или открыть лист функций и выбрать там.

Ну увидели мы начинку и что дальше ? А дальше я покажу вам на примере как их разворачивать!
Для примера я разверну эту функцию:

Code
function action takes nothing returns nothing
local unit u = <ваш юнит>
local location loc = <ваша точка>
local location loc2 = <ваша точка>
call SetUnitPositionLocFacingLocBJ(u,loc,loc2)
endfunction

Для начала нам нужно узнать начинку функции SetUnitPositionLocFacingLocBJ.
А вот и она:

Code
function SetUnitPositionLocFacingLocBJ takes unit whichUnit, location loc, location lookAt returns nothing
       call SetUnitPositionLoc(whichUnit, loc)
       call SetUnitFacing(whichUnit, AngleBetweenPoints(loc, lookAt))
endfunction

Разберём всё подробно т.к. для вас это кажется тучей буков и не больше:

function SetUnitPositionLocFacingLocBJ takes unit whichUnit, location loc, location lookAt returns nothing
call SetUnitPositionLoc(whichUnit, loc)
call SetUnitFacing(whichUnit, AngleBetweenPoints(loc, lookAt))

endfunction

То что выделено оранжевым мы копируем и вставляем в нашу функцию ;)

Code
function action takes nothing returns nothing
local unit u = <ваш юнит>
local location loc = <ваша точка>
local location loc2 = <ваша точка>
       call SetUnitPositionLoc(whichUnit, loc)
       call SetUnitFacing(whichUnit, AngleBetweenPoints(loc, lookAt))
endfunction

Ага, а дальше под ставим все значения для этого нам следует ещё раз заглянуть в начинку.

function SetUnitPositionLocFacingLocBJ takes unit whichUnit, location loc, location lookAt returns nothing

обозначив все аргументы нам будет не сложно подставить их все в нашу развёртку

Code
    call SetUnitPositionLoc(u, loc)
       call SetUnitFacing(u, AngleBetweenPoints(loc, loc2))

Ну и в конце концов всё выглядит вот так вот:
Code
function action takes nothing returns nothing
local unit u = <ваш юнит>
local location loc = <ваша точка>
local location loc2 = <ваша точка>
       call SetUnitPositionLoc(u, loc)
       call SetUnitFacing(u, AngleBetweenPoints(loc, loc2))
call RemiveLocation(loc)
call RemoveLocation(loc2)
set u = null
set loc = null
set loc2 = null
endfunction

Есть одно НО, функцию AngleBetweenPoints тоже стоит развернуть, что мы сейчас и сделаем.
Её начинка:
Code
function AngleBetweenPoints takes location locA, location locB returns real
       return bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))
endfunction

Ага! Берём это:
Code
bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))

И начинаем подставлять туда наши аргументы
Code
bj_RADTODEG * Atan2(GetLocationY(loc2) - GetLocationY(loc), GetLocationX(loc2) - GetLocationX(loc))

А лучше взять это в локалку:
Code
local real r = bj_RADTODEG * Atan2(GetLocationY(loc2) - GetLocationY(loc), GetLocationX(loc2) - GetLocationX(loc))

Ну и наш код приобретёт немного другой вид:
Code
function action takes nothing returns nothing
local unit u = <ваш юнит>
local location loc = <ваша точка>
local location loc2 = <ваша точка>
local real r = bj_RADTODEG * Atan2(GetLocationY(loc2) - GetLocationY(loc), GetLocationX(loc2) - GetLocationX(loc))
       call SetUnitPositionLoc(u, loc)
       call SetUnitFacing(u, r)
call RemiveLocation(loc)
call RemoveLocation(loc2)
set u = null
set loc = null
set loc2 = null
endfunction

Так - то!
Также список нативных функций находится в файле common.j, а список бж функций в файле blizzard.j.
Д/з: Наверняка каждый из нас знает стандартный триггер инициализации, так вот разверните его целиком и полностью :DD


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец


Сообщение отредактировал H_A_PK - Четверг, 09 Декабря 2010, 20:20:14
 

ArtefactДата: Четверг, 09 Декабря 2010, 06:51:18 | Сообщение # 2
5 уровень
Группа: Заблокированные
Сообщений: 148
Награды: 0
Репутация: 11
Блокировки:
Quote (H_A_PK)
но вы настолько тупы

Педагог, сам то найдешь код GetUnitFlyHeight в game.dll ?


На мне пятикратный взлом админсотава этова сайта. Ты возражаешь? Я тебя не замечаю.
 

SirNikolasДата: Четверг, 09 Декабря 2010, 13:16:01 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (H_A_PK)
Д/з: Наверняка каждый из нас знает стандартный триггер инициализации, так вот, разверните его целиком и полностью :DD
Издеваешься? Там больше 400 строк!


 

H_A_PKДата: Четверг, 09 Декабря 2010, 15:44:35 | Сообщение # 4
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Quote (SirNikolas)
Издеваешься? Там больше 400 строк!

Век учись - век живи. Зато вы приобретёте драгоценный опыт в этом.


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

[DUОS]Дата: Четверг, 09 Декабря 2010, 16:46:32 | Сообщение # 5
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Давайте я разверну вам станд. триггер, да, я такой маньяк в коде)

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


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

H_A_PKДата: Четверг, 09 Декабря 2010, 19:59:17 | Сообщение # 6
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Quote (|DUОS|)
Давайте я разверну вам станд. триггер, да, я такой маньяк в коде)

Ай молодец, ай геракл, ай титан, гигант просто :DD

Добавлено (09-12-2010, 19:59)
---------------------------------------------
Artefact, idapro тебе в руки


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

Pa3apTДата: Четверг, 09 Декабря 2010, 20:05:31 | Сообщение # 7
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
H_A_PK, копирайты разарта поставь хд
Если что это я тот разарт, который нубов обосрал, сори
 

H_A_PKДата: Четверг, 09 Декабря 2010, 20:25:09 | Сообщение # 8
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
Quote (Pa3apT)
H_A_PK, копирайты разарта поставь хд

чем тебе те не угодили ? )


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

Pa3apTДата: Четверг, 09 Декабря 2010, 20:35:42 | Сообщение # 9
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
Artefact, idapro тебе в руки от чем :D

Добавлено (09-12-2010, 20:35)
---------------------------------------------
local real r = bj_RADTODEG * Atan2(GetLocationY(loc2) - GetLocationY(loc), GetLocationX(loc2) - GetLocationX(loc))
И чего что мы вынули код? утечек не убавилось, Так то!)

 

H_A_PKДата: Четверг, 09 Декабря 2010, 20:41:22 | Сообщение # 10
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
От утечек нас научит избавляться [DUОS] , ага

Добавлено (09-12-2010, 20:41)
---------------------------------------------
Pa3apT, да и подсветка синтаксиса не режет глаза красным цветом х)


проклятье ляжет на любого
кто дочитает до конца
нет не дочитывай не надо
остановись ну всё капец
 

Pa3apTДата: Четверг, 09 Декабря 2010, 20:46:43 | Сообщение # 11
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
Quote
Д/з: Наверняка каждый из нас знает стандартный триггер инициализации, так вот разверните его целиком и полностью :DD

На выходе должен получиться машинный код :D


Сообщение отредактировал Pa3apT - Четверг, 09 Декабря 2010, 20:47:04
 

ARTEMONДата: Четверг, 09 Декабря 2010, 21:21:18 | Сообщение # 12
6 уровень
Группа: Заблокированные
Сообщений: 182
Награды: 0
Репутация: 53
Блокировки:
Quote (H_A_PK)
idapro

Она у меня на руках. У меня варкрафт не установлен.
Pa3apT, сынку, а ты насколько продвинут в просмотре нативок в game.dll? GetUnitFlyHeight покажешь поцанам?
Ты, и копи-тыро-пастер грубо написали. Какое вы право имели объяснить надо. Если вы компетентны в вопросе другое дело. Но если сами нубы - извинений маловата будет.


На мне пятикратный взлом админсотава этова сайта. Ты возражаешь? Я тебя не замечаю.|
 

BinGOДата: Пятница, 10 Декабря 2010, 10:29:09 | Сообщение # 13
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
Ну вобщем то такой код вытаскивается любым дизассемблером (офк если дллка не запротекчена, насчет варовской не знаю), а сам асм код разобрать, если захотеть, можно.
 

Форум о Warcraft 3 » Прочее » Отвал » [Jass] Урок 3. Начинки функций. common.j и blizzard.j
  • Страница 1 из 1
  • 1
Поиск:

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