Модератор форума: staford11  
Использование Lua скриптов.
sanfishman22
Капрал
Punisher45, спасибо, молот гнева кстати как раз
Сообщение # 2281 написано 06.05.2017 в 17:38
termat
Скаут
Всем привет. В общем, есть такой вопрос: как указать в скрипте стаки баффа. Мне надо , чтобы применялась способность только при 6 стаках Искра злости (колба). В баффах вне зависимости от количества стаков пишется просто "Искра злости". Лич кинг
Сообщение # 2282 написано 08.05.2017 в 20:56
amidimpos
Скаут
Прошу помощи)
Нужен макрос на воина 3,3,5.
Суть:
Каст Вихрь,
если Вихрь на кд, то каст Кровожадность,
если Вихрь и Кровожадность на кд, и возможно применение Победный Раж, то каст Победный Раж
если Вихрь и Кровожадность на кд, и применение способности Победный Раж невозможно, и возможно применить Казнь, то каст Казнь
если Вихрь и Кровожадность на кд, и применение способности Победный Раж и Казнь невозможно, и прокнула способность Прилив Крови, то каст Мощный Удар.

Буду очень благодарен. Или хоть просто дайте ключевые каманды (которые прописывать нужно), я сам сделаю. По сути будет готовая ротация для фурика.
Сообщение # 2283 написано 09.05.2017 в 01:16
prn
Скаут
Цитата termat ()
Всем привет. В общем, есть такой вопрос: как указать в скрипте стаки баффа. Мне надо , чтобы применялась способность только при 6 стаках Искра злости (колба). В баффах вне зависимости от количества стаков пишется просто "Искра злости". Лич кинг
local nameow, _, _, countow = UnitBuff('player','Оружие Водоворота')
countow количество стаков,или nil если нет бафа
Сообщение # 2284 написано 09.05.2017 в 07:31
ganus1993
Сержант
Цитата amidimpos ()
Прошу помощи)Нужен макрос на воина 3,3,5.
Суть:
Каст Вихрь,
если Вихрь на кд, то каст Кровожадность,
если Вихрь и Кровожадность на кд, и возможно применение Победный Раж, то каст Победный Раж
если Вихрь и Кровожадность на кд, и применение способности Победный Раж невозможно, и возможно применить Казнь, то каст Казнь
если Вихрь и Кровожадность на кд, и применение способности Победный Раж и Казнь невозможно, и прокнула способность Прилив Крови, то каст Мощный Удар.

Буду очень благодарен. Или хоть просто дайте ключевые каманды (которые прописывать нужно), я сам сделаю. По сути будет готовая ротация для фурика.
/run i={UnitCastingInfo("target")} if i[9]==(false) and UnitPower("Player") > 22 then SpellStopCasting() CastSpellByName("Зуботычина") end
/run j={UnitChannelInfo("target")} if j[8]==(false) and UnitPower("Player") > 22 then SpellStopCasting() CastSpellByName("Зуботычина") end
/run local _,a,_ = GetSpellCooldown("Кровожадность") if (a == 0) then CastSpellByName("Кровожадность") end
/run local _,a,_ = GetSpellCooldown("Вихрь") if (a == 0) then CastSpellByName("Вихрь") end
/run if UnitBuff("player", "Сокрушить!") then CastSpellByName("Мощный удар") end
/run if GetSpellCooldown("Победный раж")==0 and IsUsableSpell("Победный раж") then CastSpellByName("Победный раж") end
/run local _,a,_ = GetSpellCooldown("Героический бросок") if (a == 0) then CastSpellByName("Героический бросок") end
/run i=1 d=120 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Раскол брони" and a[8]=="player" then d=a[7]-GetTime() if a[4]==5 then break end end i=i+1 end if i>40 or d<4 then CastSpellByName("Раскол брони") end
/run if GetSpellCooldown("Казнь")==0 and IsUsableSpell("Казнь") and UnitPower("Player") > 42 then CastSpellByName("Казнь") end
/run if UnitPower("Player") > 37 then CastSpellByName("Удар героя") end
/startattack
/cancelaura Длань защиты
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 2285 написано 09.05.2017 в 08:42
amidimpos
Скаут
ganus1993
Хм.. странно, но не работает почему-то..(
Сообщение # 2286 написано 09.05.2017 в 10:53
sanfishman22
Капрал
ganus1993, он просил выхрь в приоритете, ты же ему кидаешь приоритет на кровожад, он не просил кик, ты ему кик ещё даёшь, героический бросок тоже не просил, раскол тоже лишнее
Сообщение # 2287 написано 09.05.2017 в 12:04
amidimpos
Скаут
Не ну в принципе так даже лучше я думаю (только раскол убрать), только не работает почему то...

Добавлено (09.05.2017, 13:11)
---------------------------------------------
Или просто подскажите пож, как прописать условие, что бы действие выполнялось, только в том случае, если другой скил откатате

Сообщение # 2288 написано 09.05.2017 в 13:11
Punisher45
Капрал
Цитата amidimpos ()
Каст Вихрь, если Вихрь на кд, то каст Кровожадность,
если Вихрь и Кровожадность на кд, и возможно применение Победный Раж, то каст Победный Раж
если Вихрь и Кровожадность на кд, и применение способности Победный Раж невозможно, и возможно применить Казнь, то каст Казнь
если Вихрь и Кровожадность на кд, и применение способности Победный Раж и Казнь невозможно, и прокнула способность Прилив Крови, то каст Мощный Удар.


Слэм на личе кастуется? Все это должно происходить в каком стансе, фури, армс? или там денс между стойками должен быть?
Сообщение # 2289 написано 09.05.2017 в 14:03
amidimpos
Скаут
Punisher45,  В стойке Берсерка, переходов между стойками там нету, лич 3,3,5

Код
local war = CreateFrame("Frame")
war:SetScript("OnUpdate", function(_,e)
if UnitExists("target") and UnitAffectingCombat("player") == 1 then

local rage = UnitPower("player")  

if GetSpellCooldown("Âèõðü")==0  and rage >= 25 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then
     CastSpellByName("Âèõðü")
   end
if GetSpellCooldown("Êðîâîæàäíîñòü")==0  and rage >= 20 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then
     CastSpellByName("Êðîâîæàäíîñòü")
end
if UnitBuff("player", "Ñîêðóøèòü!") and rage >= 15 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then CastSpellByName("Ìîùíûé óäàð") end

if GetSpellCooldown("Ãåðîè÷åñêèé áðîñîê")==0 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then
     CastSpellByName("Ãåðîè÷åñêèé áðîñîê")
end
if GetSpellCooldown("Êàçíü") and IsUsableSpell("Êàçíü") and rage >= 15 and IsSpellInRange("Êàçíü", "target")==1 then
     CastSpellByName("Êàçíü")
end
if GetSpellCooldown("Ïîáåäíûé ðàæ") and IsUsableSpell("Ïîáåäíûé ðàæ") and IsSpellInRange("Ïîáåäíûé ðàæ", "target")==1 then
     CastSpellByName("Ïîáåäíûé ðàæ")
end

end
end)


Вот я что то пытался сделать, только как выставить приоритеты я хз
Сообщение # 2290 отредактировано amidimpos - Вторник, 09.05.2017, 14:13
Punisher45
Капрал
Цитата amidimpos ()
local war = CreateFrame("Frame")
war:SetScript("OnUpdate", function(_,e)
if UnitExists("target") and UnitAffectingCombat("player") == 1 then

local rage = UnitPower("player")

if GetSpellCooldown("Âèõðü")==0  and rage >= 25 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then
CastSpellByName("Âèõðü")
end
if GetSpellCooldown("Êðîâîæàäíîñòü")==0  and rage >= 20 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then
CastSpellByName("Êðîâîæàäíîñòü")
end
if UnitBuff("player", "Ñîêðóøèòü!") and rage >= 15 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then CastSpellByName("Ìîùíûé óäàð") end

if GetSpellCooldown("Ãåðîè÷åñêèé áðîñîê")==0 and IsSpellInRange("Êðîâîæàäíîñòü", "target")==1 then
CastSpellByName("Ãåðîè÷åñêèé áðîñîê")
end
if GetSpellCooldown("Êàçíü") and IsUsableSpell("Êàçíü") and rage >= 15 and IsSpellInRange("Êàçíü", "target")==1 then
CastSpellByName("Êàçíü")
end
if GetSpellCooldown("Ïîáåäíûé ðàæ") and IsUsableSpell("Ïîáåäíûé ðàæ") and IsSpellInRange("Ïîáåäíûé ðàæ", "target")==1 then
CastSpellByName("Ïîáåäíûé ðàæ")
end

end
end)


Красиво кодировочка полетела) Ладно щас я накатаю скелет какой-нибудь, а ты потом сам под себя допишешь

Добавлено (09.05.2017, 14:37)
---------------------------------------------
Цитата amidimpos ()
Вот я что то пытался сделать, только как выставить приоритеты я хз


Ну на, пробуй, по идее должно работать

Код
local war = CreateFrame("Frame")
war:SetScript("OnUpdate", function(_,e)
if UnitExists("target") and UnitAffectingCombat("player") == 1 and IsSpellInRange("Кровожадность", "target")==1 then
local rage = UnitPower("player")
if GetSpellCooldown("Вихрь") == 0 and rage >= 25 then
CastSpellByName("Вихрь")
elseif GetSpellCooldown("Вихрь") ~= 0 and rage >= 20 and GetSpellCooldown("Кровожадность") == 0 then
  CastSpellByName("Кровожадность")
elseif GetSpellCooldown("Вихрь") ~= 0 and GetSpellCooldown("Кровожадность") ~= 0 and IsUsableSpell("Победный раж") and GetSpellCooldown("Победный раж") == 0 then
  CastSpellByName("Победный раж")
elseif GetSpellCooldown("Вихрь") ~= 0 and GetSpellCooldown("Кровожадность") ~= 0 and not IsUsableSpell("Победный раж") and IsUsableSpell("Казнь") and rage >= 15 and GetSpellCooldown("Казнь") == 0 then
   CastSpellByName("Казнь")
elseif GetSpellCooldown("Вихрь") ~= 0 and GetSpellCooldown("Кровожадность") ~= 0 and not IsUsableSpell("Победный раж") and not IsUsableSpell("Казнь") and UnitBuff("player","Прилив крови") and rage >= 15 and GetSpellCooldown("Мощный удар") == 0 then
      CastSpellByName("Мощный удар")
end
if GetSpellCooldown("Героический бросок")==0 then
CastSpellByName("Героический бросок")
end
end
end)
Сообщение # 2291 отредактировано Punisher45 - Вторник, 09.05.2017, 14:41
amidimpos
Скаут
Punisher45
Не, что-то не работает. Вообще.
Ошибка интерфейсной операции, вызваная модификацией (в чате сообщение).
Остальные скрипты рабоют....
Сообщение # 2292 написано 09.05.2017 в 14:49
Punisher45
Капрал
Цитата amidimpos ()
Punisher45, Не, что-то не работает. Вообще.
Ошибка интерфейсной операции, вызваная модификацией (в чате сообщение).
Остальные скрипты рабоют....

Запустил на катаклизме (вотлк клиента нет и не было) все пашет

Попробуй еще раз аккуратно скопировать код с форума и в настройках игры убрать галочку с "Ошибки сценариев луа" по пути
Esc -> Интерфейс -> Помощь
Сообщение # 2293 написано 09.05.2017 в 15:12
amidimpos
Скаут
Punisher45, Все работает шикарно) Спасибо большое) А еще вопрос-Реально как то скриптом определить сколько противников рядом? Что бы если 1 противник то кастовался Удар героя, а если больше то Рассекающий удар?
Сообщение # 2294 написано 09.05.2017 в 15:15
Punisher45
Капрал
Цитата amidimpos ()
Punisher45, Все работает шикарно) Спасибо большое) А еще вопрос-Реально как то скриптом определить сколько противников рядом? Что бы если 1 противник то кастовался Удар героя, а если больше то Рассекающий удар?

У меня такая фишка была в боте короче, там он написан был на С# и там вся эта шляпа описывалась, для афли лока и масфира, то есть через оболочку этого бота такое было возможно, там если было больше 2 игроков то кастовался фир) Если честно я не уверен что внутри клиента используя одни функции апи можно что-то такое нарисовать, думаю чуваки поопытнее могут дать пару вариков
Сообщение # 2295 написано 09.05.2017 в 15:23
ganus1993
Сержант
Количество врагов можно определить вот этим скриптом
/run local count = 0 for i = 0, 10000, 1 do if _G["NamePlate"..i] ~= nil and _G["NamePlate"..i]:IsVisible() then count = count + 1 end end print(count)
Но он считает не только тех что рядом, но вообще всех которые есть в радиусе видимости.
Пишу макросы и профили PQR
Моя подборка пве скриптов-ротаций 3.3.5
Сообщение # 2296 написано 09.05.2017 в 15:31
amidimpos
Скаут
Кто поможет с этим вопросом? Отпишите пожалуйста. Готов даже заплатить . (Что бы скрипт определял сколько рядом противников, и в зависимости от их количества юзал тот или иной скилл)
Сообщение # 2297 написано 09.05.2017 в 18:39
tobmaps
Капрал
Цитата ganus1993 ()
Количество врагов можно определить вот этим скриптом/run local count = 0 for i = 0, 10000, 1 do if _G["NamePlate"..i] ~= nil and _G["NamePlate"..i]:IsVisible() then count = count + 1 end end print(count)
Но он считает не только тех что рядом, но вообще всех которые есть в радиусе видимости.
Можно уменьшить дистанцию отображения неймплейтов, не уверен что на всех патчах работает, проверьте

Код
/run SetCVar("nameplateMaxDistance", 5)
вместо 5 ставите дистанцию какая нужна. При этом можно играться со значениями этой переменной прямо во время проверки на очередной скилл, например если у них разная дальность... Хотя лично я у себя под войнов делал иначе - сначала запоминал исходную цель, затем проверял количество различных целей вокруг с помощью цикла первых N целей через TargetNearestEnemy с проверкой IsSpellInRange на каждого и определив их количество возвращал исходную цель да применял одну из двух абилок.
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 2298 написано 10.05.2017 в 05:50
xGhostx
Скаут
в 3.3.5 через неймплейты не пойдет.
Сообщение # 2299 отредактировано xGhostx - Воскресенье, 21.05.2017, 15:43
tobmaps
Капрал
Цитата xGhostx ()
попадает ли цель под клив или за твоей спиной стоит.
сам не пробовал, т.к. не играю давно, но способы определить со спины или нет -  есть
однако подозреваю, что GetPlayerMapPosition не сработает для враждебных целей, хотя я думаю это вполне себе патчится заменой одной-двух проверок в памяти клиента, и вряд ли кто-то в своем Вардене вообще догадается эти места проверять. Если сильно нужно то могу на досуге покопаться в отладчике.
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 2300 отредактировано tobmaps - Среда, 10.05.2017, 08:16
xGhostx
Скаут
Цитата tobmaps ()
сам не пробовал, т.к. не играю давно, но способы определить со спины или нет -  есть

нету
Сообщение # 2301 отредактировано xGhostx - Воскресенье, 21.05.2017, 15:43
tobmaps
Капрал
Цитата xGhostx ()
все равно нету доступной функции для проверки за спиной или нет.

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

Насчет того что нельзя врагов проверить - это наверняка можно пропатчить... И как бы тут практически всё очевидно Клик сюда чтобы поглядеть (нам нужно по красной стрелке) . Я возможно бы даже встроил это в Гагарина, но некому интерфейс рисовать...

К тому же Targetnearestdistance, как правило, выделяет цели впереди игрока по некоторой "дуге", могут выбираться цели и сбоку/сзади, но только если они очень близко. Лично мне этого хватало и тупо не заморачивался что-то ещё доделывать, т.к. 4 вара были на мультибоксе и бегали кружили вокруг цели как шпареные, на катаклизме отлично прокатывало.

Раньше (до лич кинга) были специальные CVar отвечающие за дистанцию выделения целей табом и за его "окружность", возможно это до сих пор есть в клиенте, просто стало константой. В целом да, без изменения клиента неюзабельно...
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 2302 отредактировано tobmaps - Среда, 10.05.2017, 11:51
xGhostx
Скаут
Цитата tobmaps ()
Как раз по ссылке она есть. Там даже по теме потом далее люди обсуждали что этот скрипт полезен хилам которые хилят заклинаниями требующими смотреть на танка.
Ну если совсем лениво искать то вот ещё один, даже куда более наглядный пример - клик сюда

я не нашел
Сообщение # 2303 отредактировано xGhostx - Воскресенье, 21.05.2017, 15:44
Punisher45
Капрал
Цитата xGhostx ()
function GetTargetsCount()   local t,c,saveT = {},0,UnitGUID("target")
   for i = 1,1e3 do
      TargetNearestEnemy()
      local g = IsSpellInRange("Оглушить","target") == 1 and UnitGUID("target")
      if g and not t [g]then t [g]= true c = c+1 else t={} break end
   end
   if not saveT then ClearTarget()
   else
      for i = 1,c+1 do TargetNearestEnemy() local g = UnitGUID("target") if not g or g == saveT then break else ClearTarget() end end
   end
   return c

Подскажи что такое  for i = 1,1e3 do а именно 1e3 . Это какой-то период? И вообще где можно почитать луа именно по вову а не общий язык
Сообщение # 2304 написано 10.05.2017 в 17:25
tobmaps
Капрал
Цитата Punisher45 ()
в чтении памяти и с# я на нубском уровне, пытался научится, но после луа чета не идет.
вообще много полезного можно добавить в апи, но не GetPlayerMapPosition("target"). зачем? чтобы в луа делать сложные расчеты? надо свои делать.
где то я видел пример, как в апи добавляют функции, но найти не могу.

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

Например необходимый нам GetPlayerMapPosition() патчится заменой проверки в 0x5458FC на двухбайтовый NOP, т.е. 0x90 0x90 , либо делается JMP из 0x5458D7 в 0x5458FE. Разумеется если буду добавлять в Гагарин то там это без изменения клиента произойдет. В общем, после любого из двух вариантов изменений можно юзать и на target и вообще на что угодно, однако срабатывает только на игроках, возможно там ещё где-то намного глубже зашиты проверки, я не проверял дальше.

Если чешутся руки протестить то быстрее всего будет в CheatEngine:
А) выбираешь процесс, аттачишься, жмешь Memory View, жмешь CTRL+G, вводишь адрес 0x5458FC, правой кнопкой по найденной строке и ищешь строку Replace with code that does nothing (далее назовем как NOP), однако этот вариант лучше не юзать на серверах где админы не совсем бомжи, чтобы не уметь добавить новый адрес в варден, и к тому же не читают такие важные темы как эта :S
Б) Второй вариант это вместо "NOP" нажать Change register at this location и в поле EIP ввести 0x5458FC, на вопрос про дебаггер подтвердить согласие. Для второго варианта лучше заранее убедиться что в настройках Cheat Engine в разделе Debugger Options выбраны именно Hardware Breakpoints...
В игре проверяется через макрос /run print(GetPlayerMapPosition("target")) на вражеского героя или союзника вне группы.
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 2305 отредактировано tobmaps - Среда, 10.05.2017, 20:05
xGhostx
Скаут
Цитата Punisher45 ()
Подскажи что такое  for i = 1,1e3 do а именно 1e3 . Это какой-то период? И вообще где можно почитать луа именно по вову а не общий язык
1е3 это сокращение 1 и 3 нуля, то есть 1000. аддоны можно почитать, их же немерено и все с открытым кодом.
Цитата tobmaps ()
чтобы добавлять в API нужно вносить немало изменений в клиент, я в своих читах избегаю писанины в память, поэтому не задавался таким вопросом, существующих API более чем достаточно, те что работают не так как нужно, всегда можно пропатчить...Например необходимый нам GetPlayerMapPosition() патчится заменой проверки в 0x5458FC на двухбайтовый NOP, т.е. 0x90 0x90 , либо делается JMP из 0x5458D7 в 0x5458FE. Разумеется если буду добавлять в Гагарин то там это без изменения клиента произойдет. В общем, после любого из двух вариантов изменений можно юзать и на target и вообще на что угодно, однако срабатывает только на игроках, возможно там ещё где-то намного глубже зашиты проверки, я не проверял дальше.
если только на игроках, тогда зачем она нужна, такая урезанная?
а если нужно поменять функцию так, что она не будет юзабельна в первоначальном виде? аддоны использующие её перестанут работать?
Сообщение # 2306 написано 10.05.2017 в 20:37
KellyX
Скаут
xGhostx,  У меня пишет ошибку "A macro script has been blocked from an action only available to the Blizzard UI" на команду RunMacroText, СastSpellByName/Id и тд. Не под скажешь в чём проблема? Версия 3.3.5а гагарин использую как анлокер. Но всё равно не получается
Сообщение # 2307 написано 10.05.2017 в 21:07
tobmaps
Капрал
Цитата xGhostx ()
если только на игроках, тогда зачем она нужна, такая урезанная?

Множество применений... как на арене, для вычислений не находится ли противник за колонной (заранее внести данные расположения всех колонн на каждой арене, разделять по MapID), придется знатно приложить математические усилия, но это того стоит;
Для банальной проверки не находится ли цель за спиной, для кастеров очень полезно будет, особенно если взаимодействие с целью используется для преследования цели без участия игрока, при надобности развернуться, т.е. можно делать разворот без ожиданий всяких там ошибок "цель позади" и перехвата эвентов;
Проверка на дальность до цели, максимально точная.
Есть сомнения?

Цитата KellyX ()
У меня пишет ошибку "A macro script has been blocked from an action only available to the Blizzard UI" на команду RunMacroText, СastSpellByName/Id и тд. Не под скажешь в чём проблема? Версия 3.3.5а гагарин использую как анлокер. Но всё равно не получается

Обычно требуется прописывать /reload интерфейса если анлокер был активирован после входа на персонажа. Этакая особенность используемого метода анлока LUA, зато он анлокает абсолютно все функции LUA и не ломает работу многих аддонов (правда аддоны не анлокает ровно по той же причине)
reverse engineering your soul... балуюсь C++, C#, SQL, LUA. Владыка 1C. Окончательно забил на emuDev
Сообщение # 2308 отредактировано tobmaps - Четверг, 11.05.2017, 10:25
xGhostx
Скаут
Цитата tobmaps ()
Множество применений... как на арене, для вычислений не находится ли противник за колонной (заранее внести данные расположения всех колонн на каждой арене, разделять по MapID), придется знатно приложить математические усилия, но это того стоит;Для банальной проверки не находится ли цель за спиной, для кастеров очень полезно будет, особенно если взаимодействие с целью используется для преследования цели без участия игрока, при надобности развернуться, т.е. можно делать разворот без ожиданий всяких там ошибок "цель позади" и перехвата эвентов;
Проверка на дальность до цели, максимально точная.
Есть сомнения?
есть. все то что ты описал безусловно полезно, но делать это через GetPlayerMapPosition() ужасно неудобно.
внутри этой функции юзается большая таблица карт с сеткой координат, берутся координаты юнитов, те что в гагарине юзаются для телепортации, и из них переделывается для конкретной карты. так вот нам не нужно их переделывать, нам и исходных бы хватило и даже больше, там есть Z, без которой во многих случиях не узнать находится ли чар за текстурами или нет. 
для проверки IsUnitVisible нужно отдельную функцию делать, в которой узнается у сервера, в клиенте это реализовано как одна из проверок.
вообщем GetPlayerMapPosition() это отстой, её юзают только потому что других вариантов нету, но в нашем случае они есть!
Сообщение # 2309 написано 11.05.2017 в 12:53
Punisher45
Капрал
Цитата xGhostx ()
GetPlayerMapPosition() это отстой, её юзают только потому что других вариантов нету, но в нашем случае они есть!

Ну товарищ не ищет легких путей, у каждого свой подход)

Добавлено (11.05.2017, 15:17)
---------------------------------------------

Цитата xGhostx ()
их же немерено и все с открытым кодом.

Это все замечательно, но если я просто прочитаю код, это не значит, что я пойму как он работает) Уйдет гораздо больше времени, чем по учебнику, но если его нет, значит нет
Сообщение # 2310 написано 11.05.2017 в 15:17
Поиск: