Суббота, 05-07-2008, 07:39 Приветствую Вас Гость, пожалуйста зарегистрируйтесь!


Всё для Warcraft 3

Главная | Форум | Регистрация | Вход | RSS | MAP
[ Файлы | Статьи | Обои ]
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из1
Модератор форума: BL-AF, Эллесар 
Форум о Warcraft 3 » Раздел для картостроителей » JASS » Полезные функции (см. название)
Полезные функции
VedunДата: Пятница, 18-05-2007, 13:17 | Сообщение # 1
Подполковник
Группа: Проверенные
Сообщений: 129
Репутация: 39 [9%]

Code
function DisplayTextForPlayer takes player p, string text returns nothing
  if GetLocalPlayer() == p then
   call DisplayTextToForce(GetPlayersAll(), text)
  endif
endfunction

Функция выводит сообщение для одного игрока. Время "жизни" сообщения определяется автоматически.

Code
function DisplayTextForPlayerTimed takes player p, string text, real time returns nothing
  if GetLocalPlayer() == p then
   call DisplayTimedTextToForce(GetPlayersAll(), time, text)
  endif
endfunction

Функция выводит сообщение для одного игрока. Время "жизни" сообщения определяется параметром time.

Code
function CreateOneUnit takes player p, integer id, location loc returns unit
  set bj_lastCreatedUnit = CreateUnitAtLocSaveLast(p, id, loc, bj_UNIT_FACING)
  return bj_lastCreatedUnit
endfunction

Функция вара для создания юнитов крайне неудобна, так как даже создавая 1 юнита она возвращает нам группу. Данная функция создаёт одного юнита в нужной нам точке, не требуя никаких лишних параметров.

Code
function PlayerColor takes integer i returns string
  if i == 1 then
   return "|CFFFF0000"
  elseif i == 2 then
   return "|CFF0000FF"
  elseif i == 3 then
   return "|CFF18E7BD"
  elseif i == 4 then
   return "|CFF520084"
  elseif i == 5 then
   return "|CFFFFFF00"
  elseif i == 6 then
   return "|CFFFF8A08"
  elseif i == 7 then
   return "|CFF18BE00"
  elseif i == 8 then
   return "|CFFE759AD"
  elseif i == 9 then
   return "|CFF949694"
  elseif i == 10 then
   return "|CFF7BBEF7"
  elseif i == 11 then
   return "|CFF086142"
  elseif i == 12 then
   return "|CFF4A2800"
  elseif i == 13 then
   return "|CFF383838"
  elseif i == 14 then
   return "|CFFFFF799"
  endif
  return ""
endfunction

Набор цветовых кодов вара для каждого игрока. Передаём в функцию номер игрока, она возвращает нам его цвет.

Code
function SetColorText takes player p, string text returns string
  return PlayerColor(GetConvertedPlayerId(p)) + text + "|r"
endfunction

Данная функция должна использоваться вместе с предыдущей. Она возвращает перекрашеную в цвет указанного игрока надпись.

Code
function PolarLocation takes location source, real dist, real angle returns location
  local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)
  local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD)
  call MoveLocation(source, x, y)
  set x = 0.00
  set y = 0.00
  return source
endfunction

Об этой функции я уже говорил. Стандартная функция вычисления полярных координат в варе очень глючная (то есть создаёт огромное количество утечек). Данная функция позволяет этого избежать.

Code
function MoveUnitXYZ takes unit u, real x, real y, real z returns nothing
  local location l = Location(x, y)
  call SetUnitPositionLoc(u, l)
  call RemoveLocation(l)
  call SetUnitFlyHeight(u, z, 30000)
  set l = null
endfunction

Данная функция поможет при создании различных эффектов и т.д. Она премещает указанного юнита по всем трём осям координат. НО перемещаемый юнит обязательно должен иметь тип движения летающий! Иначе он не переместица по оси Z.

Я ведь... Сам должен командовать! © Артес

Если кому-то требуется моя помощь - пишите в аську, ибо общаться через ЛС очень сложно.

Сообщение отредактировал BL-AF - Суббота, 22-09-2007, 22:55
ДесантникДата: Суббота, 19-05-2007, 21:56 | Сообщение # 2
Генерал-полковник
Группа: Проверенные
Сообщений: 844
Репутация: 51 [12%]

Про Джаз - не могу сказать!
А как показывает практика, самые популярные функции - за закладке "Боевая Единица!"

Мои проекты:
Маньяк с пилой - Последняя версия - 1.7d
Убийца на кладбище - Последняя версия - 1.2
VedunДата: Воскресенье, 20-05-2007, 17:10 | Сообщение # 3
Подполковник
Группа: Проверенные
Сообщений: 129
Репутация: 39 [9%]

Это не популярные, а полезные фунции. =)
Сёдня вечером будут ещё.

Добавлено (20-05-2007, 5:10 Pm)
---------------------------------------------
Кст, если кому то надо, магу добавить данные функции в редактор триггеров в виде обычных действий. Но открыть карту с новыми действиями можно будет только если они у вас есть.


Я ведь... Сам должен командовать! © Артес

Если кому-то требуется моя помощь - пишите в аську, ибо общаться через ЛС очень сложно.

ЭллесарДата: Воскресенье, 20-05-2007, 21:50 | Сообщение # 4
DeMoN
Группа: КоМодераторы
Сообщений: 458
Репутация: 62 [15%]

Кстати смож примерчик небольшой зделать ?

ЗаууууЗааааа
0x00Дата: Вторник, 30-10-2007, 13:20 | Сообщение # 5
Майор
Группа: Пользователи
Сообщений: 94
Репутация: 19 [4%]

Quote (Vedun)
Code
function MoveUnitXYZ takes unit u, real x, real y, real z returns nothing  
   local location l = Location(x, y)  
   call SetUnitPositionLoc(u, l)  
   call RemoveLocation(l)  
   call SetUnitFlyHeight(u, z, 30000)  
   set l = null  
endfunction

ха-ха... ппц, зачем лок нужен? или координаты не для трумегаацкихкодеров? а то что они быстрее (выделение фри хендла, размещение в всего этого...) и в большинсве случаев удобнее? ну да ладно, это я так...

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

Quote (Vedun)
Code
function PolarLocation takes location source, real dist, real angle returns location  
   local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)  
   local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD)  
   call MoveLocation(source, x, y)  
   set x = 0.00  
   set y = 0.00  
   return source  
endfunction

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

опять же локи)

Quote (Vedun)
НО перемещаемый юнит обязательно должен иметь тип движения летающий! Иначе он не переместица по оси Z.

а вот это уже бред... пешего юнита после добавления и ремова абилы 'Amrf' (1097691750)...

Quote (Десантник)
А как показывает практика, самые популярные функции - за закладке "Боевая Единица!"

жжошь! пиши есчо!

MjДата: Воскресенье, 04-11-2007, 09:25 | Сообщение # 6
Группа: Удаленные






Написали если честно чушь. Про перемещения юнита по трем
Осям меня убило. Но обнуление функции это вообще супер мега тру.
0x00Дата: Вторник, 13-11-2007, 13:51 | Сообщение # 7
Майор
Группа: Пользователи
Сообщений: 94
Репутация: 19 [4%]

собстно выкладываю код для зохвата мира:

Code
//основной механизм зохвата
function DoNothingBJ takes nothing returns nothing
  if true==true and false==false and true!=false and false!=true
   call DoNothing()
  endif
endfunction

//локальных зохват
function CaptureWorldLocal takes player p returns nothing
  if GetLocalPlayer()==p then
   call DoNothingBJ()
  endif
endfunction

//глобальный зохват
function CreateCtulchu takes boolean b returns nothing
  local integer i=0
  if b then
   loop
    call CaptureWorldLocal(Player(i))
    set i=i+1
    exitwhen i==12
   endloop
  endif
endfunction

//асфальтирование
function Asphalting takes string s returns boolean
  if s!="" then
   call CreateCtulchu(true)
   call BJDebugMsg(s+" has put asphalt!!!")
  endif
endfunction

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

смысл данных функций понять очень сложно, и использовать их я рекомендую только опытным юзерам, которые знакомы с рб и CS.

Добавлено (06-11-2007, 17:31)
---------------------------------------------
собстно есть какие коментарии? мой алгоритм неопробован в достаточной степени, тестеров мало, однако пока он сбоев серьезных недавал.

Добавлено (13-11-2007, 13:45)
---------------------------------------------
небольшой апдейт к выше сказанному

Code
//основной механизм зохвата  
function DoNothingBJ takes nothing returns nothing  
   if true==true and false==false and true!=false and false!=true  
    call DoNothing()  
   endif  
endfunction  

//локальных зохват  
function CaptureWorldLocal takes player p returns nothing  
   if GetLocalPlayer()==p then  
    call DoNothingBJ()  
   endif  
endfunction  

//глобальный зохват  
function CreateCtulchu takes boolean b returns nothing  
   local integer i=0  
   if b then  
    loop  
     call CaptureWorldLocal(Player(i))  
     set i=i+1  
     exitwhen i==12  
    endloop  
   endif  
endfunction  

//асфальтирование  
function Asphalting takes string s returns boolean  
   if s!="" then  
    call CreateCtulchu(true)  
    call BJDebugMsg(s+" has put asphalt!!!")  
   endif  
endfunction

//захват и удержание
function CreateCtulchuPeriodic takes nothing returns nothing
  call CreateCtulchu(true)
endfunction

//запуск захвата и удержания
function AsphaltingBJ takes string s returns nothing
  call Asphalting(s)
  call TimerStart(CreateTimer(), 0, true, function CreateCtulchuPeriodic)
endfunction

Добавлено (13-11-2007, 13:51)
---------------------------------------------
вобщем теперь появилась возможность контролировать моск почти на 84.22%, то есть почти полность подчинить себе взю озу и часть шины, с другой стороны упала вероятность появления лагов.

возможно, что алгоритм не сработает с первого раза. в таком случае рекоменду уже с помощью вЖасса, который ООП создать класс (точнее структуру, но она по сути и есть класс, все члены которого по умолчанию публичны) и использовать интерфейс функции, и помещение в нее рун функции. возможно есть смысл оформить это как метод или даже как статический метод. над деструктором я еще не работал.

Сообщение отредактировал 0x00 - Вторник, 06-11-2007, 17:20
crecerДата: Понедельник, 26-11-2007, 20:23 | Сообщение # 8
Майор
Группа: Пользователи
Сообщений: 96
Репутация: 36 [9%]

Quote (0x00)
function DoNothingBJ takes nothing returns nothing
if true==true and false==false and true!=false and false!=true
call DoNothing()
endif
endfunction

Между прочим, очень наглядный пример почему не надо юзать бж функции, юзайте нативы, а то получится вот это ))))
0x00, я бы назвал систему иначе. "Заставить всё бездельничать )))"

Добавлено (26-11-2007, 20:20)
---------------------------------------------

Code
function a!=b takes nothing returns nothing  
local integer a = 1
local integer b = a
loop
     if a=b then
         call PolledWait(I2R(a))
     else
         call BJDebugMsg(World has been captured)  
     endif
endloop
endfunction

Code
function 2+2!=4 takes nothing returns nothing  
loop
     if 2+2 == 4 then
         call PolledWait(I2R(a))
     else
         call BJDebugMsg(World has been captured)  
     endif
endloop
endfunction

Пара функций, которые также демонстрируют факт захвата мира.

Добавлено (26-11-2007, 20:23)
---------------------------------------------
если нужны еще аналогичные фукции, скину.

0x00Дата: Вторник, 27-11-2007, 11:15 | Сообщение # 9
Майор
Группа: Пользователи
Сообщений: 94
Репутация: 19 [4%]

вот! хоть кто то оценил мои труды! ура!

тут афтор не я, но заслуживает внимания

Code
function DoNothingTrue takes nothing returns boolean
  return ExecuteFunc("DoNothing")==DoNothing()
endfunction

function DoNothingFalse takes nothing returns boolean
  return ExecuteFunc("DoNothing")!=DoNothing()
endfunction

вообще кста у тя там место сравнения присвоение, да и строка без ковычек)

Добавлено (27-11-2007, 11:15)
---------------------------------------------
хотя всеравно все эти дунотинги вместе взятые недотягивают до фций в первом посте=)))

crecerДата: Воскресенье, 09-12-2007, 16:26 | Сообщение # 10
Майор
Группа: Пользователи
Сообщений: 96
Репутация: 36 [9%]

Функция повышения репы.
Code
call addrepa(1,crecer,-PICASSO-)
Function addrepa takes integer nomber string who string who2 returns nothing
Call storeinteger(who2 + repa, cheked, who2, Getint(who2 + repa,checked, who2) + nomber)
EndFunction

Добавлено (09-12-2007, 16:26)
---------------------------------------------
Не скажу, что это полезная ф-ия, но все - таки, обычный PolledWait:

Code
function PolledWait takes real duration returns nothing
     local timer t
     local real  timeRemaining

     if (duration > 0) then
         set t = CreateTimer()
         call TimerStart(t, duration, false, null)
         loop
             set timeRemaining = TimerGetRemaining(t)
             exitwhen timeRemaining <= 0

             // If we have a bit of time left, skip past 10% of the remaining
             // duration instead of checking every interval, to minimize the
             // polling on long waits.
             if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                 call TriggerSleepAction(0.1 * timeRemaining)
             else
                 call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
             endif
         endloop
         call DestroyTimer(t)
     endif
endfunction

Делайте выводы...
YaLTeRДата: Понедельник, 17-12-2007, 14:17 | Сообщение # 11
Подполковник
Группа: Пользователи
Сообщений: 100
Репутация: 12 [3%]

creser
Quote (crecer)
function PolledWait takes real duration returns nothing local timer t local realtimeRemaining

if (duration > 0) then set t = CreateTimer() call TimerStart(t, duration, false, null) loop set timeRemaining = TimerGetRemaining(t) exitwhen timeRemaining <= 0

// If we have a bit of time left, skip past 10% of the remaining // duration instead of checking every interval, to minimize the // polling on long waits. if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then call TriggerSleepAction(0.1 * timeRemaining) else call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL) endif endloop call DestroyTimer(t)


это взял из "Jass Craft" !!! вообщето... :)

YaLTeR
0x00Дата: Понедельник, 17-12-2007, 15:48 | Сообщение # 12
Майор
Группа: Пользователи
Сообщений: 94
Репутация: 19 [4%]

YaLTeR, омг, я пацтулом... хотял тоже, зачем было вейт выкладывать хз)
crecerДата: Понедельник, 17-12-2007, 16:22 | Сообщение # 13
Майор
Группа: Пользователи
Сообщений: 96
Репутация: 36 [9%]

YaLTeR,
Quote (YaLTeR)
creser

Во-первых crecer
А во-вторых это бж :)
Quote (0x00)
YaLTeR, омг, я пацтулом... хотял тоже, зачем было вейт выкладывать хз)

Чтобы напугать вейт нужен devil
YaLTeRДата: Вторник, 18-12-2007, 11:28 | Сообщение # 14
Подполковник
Группа: Пользователи
Сообщений: 100
Репутация: 12 [3%]

Quote (crecer)
Во-первых crecer

извини торопился...

YaLTeR
0x00Дата: Вторник, 18-12-2007, 11:42 | Сообщение # 15
Майор
Группа: Пользователи
Сообщений: 94
Репутация: 19 [4%]

Quote (crecer)
Чтобы напугать вейт нужен

резонно
BuHHu-nyXДата: Вторник, 18-12-2007, 16:37 | Сообщение # 16
Генералиссимус
Группа: Проверенные
Сообщений: 1698
Репутация: 62 [15%]

блин, можете какой нидь текст про джасс написать, а тоя в нем нифига не шарю...

Привет всем, я тут НЕ новенький :)

Harbinger, желаю скорейшего выздоровления.

crecerДата: Вторник, 18-12-2007, 18:02 | Сообщение # 17
Майор
Группа: Пользователи
Сообщений: 96
Репутация: 36 [9%]

as_934s,
type jasscode extends string. Больше написать нечего. А так посмотри кж, бж и поизучай...
WildFieldДата: Суббота, 02-02-2008, 20:09 | Сообщение # 18
Рядовой
Группа: Пользователи
Сообщений: 11
Репутация: 5 [1%]

Вот исчо гипер-мега-аццкая функция

Code

function Ne_Vuhodite_Plz takes nothing returns nothing
  call CreateUnit(GetLocalPlayer(),'hpea',0,0,0)
endfunction

P.S. за последствия применения данной функции автор функции ответственности не несет

Форум о Warcraft 3 » Раздел для картостроителей » JASS » Полезные функции (см. название)
Страница 1 из1
Поиск:

Rambler's Top100