Записи участника (H_A_PK) - Форум


Правила форума ·

Результаты поиска

H_A_PK

#406 | Тема: Жалоба на Модераторов
Quote (PaulX)
H_A_PK,Не может такое быть с радикалом(именно у меня удалили), тогда я еще раз поставлю картинку.. и вопросы исчерпаны. Прошу прощения.

Тогда иди на радикал жалуйся
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#407 | Тема: Хеш Таблица
Quote (NoExist)
Но, я так понял, надо создать переменную Hash... Но никакого типа переменной Хеш таблицы я не нашел... Мозг парю уже который час... Разжуйте плз...

У тебя какой патч ? Там просто должна быть Хеш Таблица
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#416 | Тема: Система воскрешения (Jass)
Code
function Trig_Revive_Hero_Taimer takes nothing returns nothing

  local timer t=GetExpiredTimer()
  local integer ID=GetHandleId(t)
  local unit u=LoadUnitHandle(udg_Hash,ID,0)
  local player p=GetOwningPlayer(u)
  local timerdialog w=LoadTimerDialogHandle(udg_Hash,ID,2)
  local real x = 0
  local real y = 0
   
   if GetPlayerId(p) <= 5 then
    set x = GetRectCenterX(udg_rect1)\\ udg_rect1 облость для первой команды
    set y = GetRectCenterY(udg_rect1)
   else
    set x = GetRectCenterX(udg_rect2)\\ udg_rect2 облость для второй команды
    set y = GetRectCenterY(udg_rect2)
   endif   
    
//Воскрешает героя в стартовой локации,можно менять
   call ReviveHero(u,x,y,true )
    
    if GetLocalPlayer()==GetOwningPlayer(u)then
      call PanCameraTo(GetUnitX(u),GetUnitY(u))
    endif
     
  call PauseTimer(t)
  call DestroyTimer(t)
  call DestroyTimerDialog(w)
  call FlushChildHashtable(udg_Hash,ID)
   
set t=null
set u=null
set p=null
set w=null

endfunction

function Trig_Revive_Hero_Actions takes nothing returns nothing

local timer t
local integer ID
local timerdialog w
local unit u=GetTriggerUnit()
if IsUnitType(u,UNIT_TYPE_HERO)==true then
set t=CreateTimer()
set ID=GetHandleId(t)
set w=CreateTimerDialog(t)
//Создает окно таймера в котором будет написанно имя игрока владельца умершего героя
call TimerDialogSetTitle(w,GetPlayerName(GetOwningPlayer(u)))
call TimerDialogDisplay(w,true)
call SaveUnitHandle(udg_Hash,ID,0,u)
call SaveTimerDialogHandle(udg_Hash,ID,2,w)
//Запускает таймер,GetHeroLevel(u)*3. время через которое возродиться наш герой.
call TimerStart(t,GetHeroLevel(u)*3.,true,function Trig_Revive_Hero_Taimer)
set t=null
set w=null
endif
set u=null
endfunction
function InitTrig_Revive_Hero takes nothing returns nothing
local integer i=0
local trigger trig=CreateTrigger()
loop
call TriggerRegisterPlayerUnitEvent(trig,Player(i),EVENT_PLAYER_UNIT_DEATH,null)
set i=i+1
exitwhen i==11
endloop
call TriggerAddAction(trig,function Trig_Revive_Hero_Actions)
set trig=null
endfunction

держи

И чтоб ты знал, я добавил только это:
Code
local real x = 0
  local real y = 0
   
   if GetPlayerId(p) <= 5 then
    set x = GetRectCenterX(udg_rect1)\\ udg_rect1 облость для первой команды
    set y = GetRectCenterY(udg_rect1)
   else
    set x = GetRectCenterX(udg_rect2)\\ udg_rect2 облость для второй команды
    set y = GetRectCenterY(udg_rect2)
   endif  
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#417 | Тема: Японцы
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#418 | Тема: [Статья]Jass поляризация
-Я был на форуме мне сказали: "юзай полярки!". Что это? Да да, сейчас я всё для вас разжую.
Плярка "PolarProjectionsBJ" in jass. Поглядим , что внутри этой функции.
[jass]
functions PolarProjectionsBJ takes location loc, real a, real deegres returns location
local real x = GetLocationX(loc) + a * CosBJ(deegres)
local real y = GetLocationX(loc) + a * SinBJ(deegres)
local location loc = Location(x,y)
return loc
endfunction[/jass]

А вообще по хорошему всё должно быть так:
[jass]

globals
location Nloc = Location(0,0)
endglobals

functions PolarProjections takes location loc, real a, real deegres returns location
local real xl = GetLocationX(loc)
local real yl = GetLocationY(loc)
local real x = xl + a * Cos(.0174532*deegres)
local real y = yl + a * Sin(.0174532*deegres)
call MoveLocation(Nloc,x,y)
return Nloc
endfunction[/jass]
Функция изначально предназначена для нахождения точки на окружности, а точнее , это элементарное тождество косинуса и синуса.
Нарисуем круг, точка loc есть центр круга , число a есть радиус , а deegres угол.

Да, выглядит это так. Формула:

[jass]
x + r * CosA
у + r * SinA[/jass]

в эту формулу ведено всего две плоскости х и у и один угла пусть для нас он будет "поворот" .
Я придумал формулу на три плоскости включая два поворота "поворот" и "угл атаки", то есть точка уже будет на шаре, а не круге.
[jass]

x + (r*CosB) * CosA
y + (r*SinB) * CosA
z + r * SinA[/jass]

Да, точка включает теперь "угл атаки" (если не знаете , что это, то создайте камеру и посмотрите там), то есть вводить предётся два угла. Уже этой формулой можно найти любую точку на шаре.
Выглядит рисунок по подобной формуле так:

То есть шар создать из юнитов или молний теперь рас плюнуть. А если вы будете вращать по этой формуле ?
Плоскость Z будет не красиво ходить разнообразно;), чтоб наше вращение выглядело как орбита юпитера, нужно вводить третий угл "крен". Но увы я такую формулу только разрабатываю , ждите обновлений =)
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#419 | Тема: Введение в Jass
Хеш Таблицы

вступление



Выход нового, 1.24, патча стал проблемой для многих игроков Warcraft’а, они потеряли возможность играть в большинство нестандартных карт. Это случилось из-за фикса старой ошибки близов, называемой Return Bug, благодаря которой мы могли получить Handle любого объекта, а некоторые хакеры открыть окно cmd. Взамен они дали возможность пользоваться хеш-таблицами, которые намного удобнее и быстрее (более подробно про хеш-таблицы можно узнать на страницах Wikipedia). В данную таблицу можно записывать абсолютно любые игровые объекты или переменные. Это может быть использовано для создания оригинальных способностей юнитов или дополнительных характеристик, таких как усталость, сытость, температура и т.д. Если у вас есть хотя бы минимальные знания жасса, то продолжим :)





Использования.

Для того что бы приступить к использованию Хеш Таблиц, необходимо, для начала создать глобальную переменную типа Хеш Таблица или hashtable. Далее её нужно инициализировать (сделать это необходимо, иначе ваша Хеш Таблица не будет работать). Делается это такой строкой:

[jass]set <Хеш Таблица> = InitHashtable()[/jass]
Лучше сделать это при инициализации карты, иначе хеш не будет работать до тех пор пока вы его не инициализируете.


Получение Handle объекта

Если мы хотим присваивать объектам какие-либо значения, то нам необходим хендл данного объекта. Получить его мы можем с помощью функции “GetHandleId”. В качестве аргумента мы передаём любой игровой объект и получаем число типа “Целочисленное (integer) ”. Пример:

[jass]local integer ObjectHadle
set ObjectHadle = GetHandleId(udg_Unit)[/jass]
В данном примере мы присвоили переменной “ObjectHadle” хендл юнита, заранее занесённого в переменную “udg_Unit”


Сохранение значений

Теперь когда таблица создана и мы умеем получать ссылки на объекты в неё можно записывать любые значения. Для записи используются функции с префиксом “Save” (например SaveInteger или SaveUnitHandle) из списка предоставленного выше. Простейшим примером использования данных функций является запись числа для юнита:

[jass]call SaveReal(udg_Hash, GetHandleId(udg_Unit), 0, 1.00)[/jass]

В первом аргументе мы передаём функции “SaveReal” хеш-таблицу (“udg_Hash”), во втором хендл юнита “udg_Unit” (созданного ранее и записанного в переменную “udg_Unit”), для которого мы хотим записать это число, в третьем “номер ячейки” данного числа(“0”), ну а четвёртым мы передали само число(“1.00”). Если мы захотим записать другие числа, то мы можем либо перезаписать его, использую функцию:


[jass]call SaveReal(udg_Hash, GetHandleId(udg_Unit), 0, “2.00”)[/jass]

Либо записать их в другие ячейки:

[jass]
call SaveReal(udg_Hash, GetHandleId(udg_Unit), 1, “3.00”)
call SaveReal(udg_Hash, GetHandleId(udg_Unit), 2, “4.00”)
call SaveReal(udg_Hash, GetHandleId(udg_Unit), 3, “5.00”)[/jass]

Загрузка значений

Для загрузки из таблицы используются функции с префиксом “Load” из списка предоставленного выше. Давайте напишем функцию для загрузки числа из прошлого примера и вывода его на экран:

[jass]local real test
set test=LoadReal(udg_Hash, GetHandleId(udg_Unit), 0)

call BJDebugMsg(R2S(test))[/jass]

Сначала мы указываем функции хеш-таблицу (“udg_Hash”), затем даём ссылку на объект (“GetHandleId(udg_Unit)”), а в конце номер ячейки (“0”), из которой мы хотим получить это число. После выполнения этой функции переменная “Test” должна стать равной “1.00” и на экране появится соответствующая надпись


Проверка
Что бы проверить занята ли ячейки или нет пользуются функциями:

[jass]native HaveSavedInteger takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedReal takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedBoolean takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedString takes hashtable table, integer parentKey, integer childKey returns boolean
native HaveSavedHandle takes hashtable table, integer parentKey, integer childKey returns Boolean[/jass]

В качестве аргументов принимаются хеш-таблица, хендл объекта и номер ячейки. Если запись в ячейке уже существует, то вернётся значение “true”, если же ячейка свободна, то функция вернёт значение “false”. Пример:


[jass]if HaveSavedReal (udg_Hash, GetHandleId(udg_Unit), 0) == true then
call BJDebugMsg(“True”)
else
call BJDebugMsg(“False”)
endif[/jass]

Удаление записи

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

[jass]
native RemoveSavedInteger takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedReal takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedBoolean takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedString takes hashtable table, integer parentKey, integer childKey returns nothing
native RemoveSavedHandle takes hashtable table, integer parentKey, integer childKey returns nothing[/jass]

Примером очищения ячейки может служить код:

[jass]call RemoveSavedReal (udg_Hash, GetHandleId(udg_Unit), 0)[/jass]

Как и в прошлом примере, в качестве аргументов, мы указываем хеш-таблицу, ссылку на объект и номер ячейки.

Полное удаление записей

Последние 2 функции, которые мы с вами разберём, будут “FlushParentHashtable” и “FlushChildHashtable”. FlushParentHashtable позволяет удалить нам абсолютно все записи из хеш-таблицы. В качестве аргумента указывается только очищаемая хеш-таблица. После использования донной функции хеш-таблицу приходиться инициализировать заново! Пример:

[jass]call FlushParentHashtable(udg_Hash)[/jass]

В 1 ячейке может храниться только 1 значение любого типа
Правильно:
[jass]call SaveReal(udg_Hash, GetHandleId(udg_Unit), 0, “1.00”)
call SaveUnitHandle(udg_Hash, GetHandleId(udg_Unit), 1, udg_Unit)[/jass]

Не правильно:
[jass]call SaveReal(udg_Hash, GetHandleId(udg_Unit), 0, “1.00”)
call SaveUnitHandle(udg_Hash, GetHandleId(udg_Unit), 0, udg_Unit)[/jass]
Прикрепления: 0886336.jpg (14.2 Kb)
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D
Поиск: