NoX World - форум об игре NoX

 
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  
Сейчас онлайн стрима нет!
Сейчас на сервере никого нет!

Обязательно все ознакомьтесь с новыми Правилами Портала!

Актуальные новости:
IP сервера изменён! Новый IP: 45.144.64.229. Сервер также доступен через Westwood Online (XWIS, игру через сервер)


Важные темы:
Как играть по сети? Понятное руководство!
Правила Сервера NoxWorld.
Как помочь форуму финансово?

Автор Тема: Делимся скриптами  (Прочитано 43370 раз)

0 Пользователей и 2 Гостей смотрят эту тему.

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Я не переучиваю. Мой код - решение проблемы для тех, кто не может приспособиться к стандартному string.sub
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Давненько я не пополнял эту тему. Надо исправить.

Мгновенное закрытие Nox'а (как если бы завершили процесс в диспетчере задач).
Код: (lua) [Выделить]
function close()
os.exit();
end

Узнать сколько времени ты играешь в Nox:
function NoxExecTime()
return os.clock()
end

Определение здоровья юнита в Unimod сейчас работает неправильно. Если вы запросите хп мага, то вполне можете получить 212341, вместо желаемых 75.

Данная обёртка это фиксит:
Код: (lua) [Выделить]
function getUnitHP(unit)
if unit==nil then return nil end
local fhp=unitHP(unit)
while (fhp - 65536)>=0 do
fhp=fhp - 65536
end
return fhp
end
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

Perfect

  • Map Editor PRO
  • Старожил
  • *
  • Карма: 125
  • Оффлайн Оффлайн
  • Сообщений: 1148
  • Слушай маму и drum&bass
  • Awards За поддержку форума - 2013 Лучший дизайн 5 конкурса карт 3 конкурс карт - приз Evengard-а за самую большую карту 3 конкурс карт - лучшая карта Рука форума 2012 Медаль 'За фантазию и упорство в создании карт - 2011' Медаль 'Победитель II конкурса карт' Лучшая карта
    • Просмотр профиля
    • nÖrange soundcloud
    • Awards

Spoiler (click to show/hide)
Записан

Dio

  • Глобальный модератор
  • Старожил
  • **
  • Карма: 99
  • Оффлайн Оффлайн
  • Сообщений: 1274
  • Некромансеры "живы"!
  • Awards Орден 'За заслуги перед форумом I степени' Активным участникам сходок - 2013 За релиз ЮниМода За набор курсоров для Windows За разгадку главного секрета Nox Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

os.clock()
Returns an approximation of the amount in seconds of CPU time used by the program.

С lua.org. Фактически это не время, которое запущен Nox.
Записан
Пользуйтесь UniMod-ом.

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Насколько я помню, время с момента хоста. Во всяком случае давно тестировал - совпадало.

Perfect, у тебя есть решение получше? Может опишешь, а не спойлерами кидаться будешь.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

KirConjurer

  • Постоялец
  • ***
  • Карма: 67
  • Оффлайн Оффлайн
  • Сообщений: 246
  • User #1234!
    • Просмотр профиля
    • Awards

function unitGetHPSafe(unit)
  local hd = getPtrPtr(unit, 0x22C) -- Health Data
  if not hd then return 0 end
  return getPtrShort(hd, 0)
end
Кстати, почти любой неразрушаемый юнит можно сделать разрушаемым
function unitNewHData(unit, hp)
  local hd = memAlloc(0x14)
  setPtrPtr(unit, 0x22C, hd)
  setPtrShort(hd, 0, hp) -- current hp
  setPtrShort(hd, 2, hp) -- prev hit hp
  setPtrShort(hd, 4, hp) -- max hp
  return true
end
 
Записан

Evengard

  • SysAdmin
  • Администратор
  • Старожил
  • ***
  • Карма: 186
  • Оффлайн Оффлайн
  • Сообщений: 2728
  • Director
  • Awards Столп форума 2012 Активным участникам сходок - 2013 За сервер Орден 'За заслуги перед форумом I степени'
    • Просмотр профиля
    • Awards

os.clock()

Не время это ни фига. А "сколько времени CPU обрабатывал ТОЛЬКО Нокс". Сложно объяснить. Процессор же ведь постоянно переключается между задачами (мультизадачность так и делается ж ведь) и эта функция показывает, сколько процессор уделил времени Ноксу.
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

PS: Покаяние - Признание своей вины в чем-либо, обычно с просьбой о прощении

Lаrboss

  • Старожил
  • *****
  • Карма: 109
  • Оффлайн Оффлайн
  • Сообщений: 910
  • Абстрагирую
  • Awards Знак 'Властелин Сил Природы' За редактор шрифтов - 2013 Медаль 'За программу Nox Server Notificator' За программу Nox Binder Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

Цитировать
Фактически это не время, которое запущен Nox.
Конечно. Это процессорное время, уделенное Nox"у
Записан
Отец читеров

Evengard

  • SysAdmin
  • Администратор
  • Старожил
  • ***
  • Карма: 186
  • Оффлайн Оффлайн
  • Сообщений: 2728
  • Director
  • Awards Столп форума 2012 Активным участникам сходок - 2013 За сервер Орден 'За заслуги перед форумом I степени'
    • Просмотр профиля
    • Awards

Я-то знаю. Пытаюсь объяснить, что такое "процессорное время".)
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

PS: Покаяние - Признание своей вины в чем-либо, обычно с просьбой о прощении

Lаrboss

  • Старожил
  • *****
  • Карма: 109
  • Оффлайн Оффлайн
  • Сообщений: 910
  • Абстрагирую
  • Awards Знак 'Властелин Сил Природы' За редактор шрифтов - 2013 Медаль 'За программу Nox Server Notificator' За программу Nox Binder Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

Да, вроде, ничего сложного. 1 секунда 100% - ой загрузки 1 - го CPU = 1 секунда процессорного времени. 1 секунда 50% - ой загрузки 1 - го CPU = 0.5 секунды процессорного времени и тд.
Записан
Отец читеров

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Надо подновить чутка тему. А то сильно увлёкся исследованиями, что этот тред совсем вылетел из головы.
Сегодня я выложу часть скриптов, используемые на моём сервере по сей день. В них вы не найдёте чего-то принципиально нового - эти функции просто удобные обёртки под Unimod функционал.

1. Мгновенное убийство игрока (даже под неуязвимостью бесконечной длительности). Функция "перегружена": если передано число, то будет убит игрок по индексу из таблицы игроков; иначе будет убит игрок по нику.
Код: (Lua) [Выделить]
function kill(nick)
local obj
local msg
if type(nick)=="number" then
obj=playerList()[nick]
else
obj=playerGetByName(nick)
end
buffApply(obj,16,1)
sendChat(32,'Slayed player '..playerInfo(obj).name,1,1)
end
Spoiler (click to show/hide)
2. Телепортация игрока в координаты. На вход функции подаётся 3 параметра: ник игрока, координата X, координата Y.
Код: (Lua) [Выделить]
function teleportToCoor(obj,x,y)
unitMove(playerGetByName(obj),x,y)
sendChat(32,'Player '..obj..' was teleported to ('..x..';'..y..')',1,1)
end
3. Телепортация игрока в точку его курсора. На вход подаётся ник этого игрока.
Код: (Lua) [Выделить]
function teleportToCur(obj)
x,y=playerMouse(playerGetByName(obj))
unitMove(playerGetByName(obj),x,y)
sendChat(32,'[SERVER]Player '..obj..' was teleported to ('..x..';'..y..')',1,1)
end
4. Телепортация игрока к игроку. На вход передаётся 2 строки: кого телепортировать и к кому телепортировать.
Код: (Lua) [Выделить]
function teleportToPlayer(pl1,target)
local x,y=unitPos(playerGetByName(target))
unitMove(playerGetByName(pl1),x,y)
sendChat(32,'[SERVER]Player '..pl1..' was teleported to player '..target,1,1)
end
5. Дать игроку предмет в инвентарь. На вход подаётся 2 строки: что дать(имя из thing.bin) и кому дать (ник).
Код: (Lua) [Выделить]
function give(obj, nick)
if nick==nil then nick=hostname end
if nick==nil then return 0 end
x=createObjectIn(obj,playerGetByName(nick))
print('Object "'..obj..'" now in '..nick.."'s inventory!")
return x
end
Spoiler (click to show/hide)

Мои скрипты становятся всё больше и мне всё труднее находить что-то более-менее завершенное и готовое к размещению. В данный момент я работаю над большой таблицей - она должна стать частью большой документации по Unimod (ибо нормальной документации по прежнему нет). Из запланированного пока есть только спецэффекты. Так что тема не будет пополняться в ближайшие месяца два как минимум.
А вообще, мне интересно, помогло ли кому-нибудь когда-нибудь то, что здесь выложено?
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Фикс для получения здоровья (выглядит криво, но работает):
Код: (Lua) [Выделить]
SYS_unitHP=unitHP
function unitHP(unit, amount)
if(amount==nil) then
local hpdata = getPtrPtr(unit, 0x22C)
if not hpdata then return nil end
return getPtrShort(hpdata, 0)
else
SYS_unitHP(unit,amount)
end
end
Внимание! Вызывать фикс нужно только один раз. Чтобы не вызвать наверняка, положите функцию в onFirstFrame.
По хорошему надо уже библиотеку фиксить.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

Evengard

  • SysAdmin
  • Администратор
  • Старожил
  • ***
  • Карма: 186
  • Оффлайн Оффлайн
  • Сообщений: 2728
  • Director
  • Awards Столп форума 2012 Активным участникам сходок - 2013 За сервер Орден 'За заслуги перед форумом I степени'
    • Просмотр профиля
    • Awards

Кто тебе мешает сделать это? :) Сорцы юнимода открыты.
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

PS: Покаяние - Признание своей вины в чем-либо, обычно с просьбой о прощении

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Отсутствие комментариев и скачиваемости моих поделок. Это просто будет бесполезная трата времени.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

Dio

  • Глобальный модератор
  • Старожил
  • **
  • Карма: 99
  • Оффлайн Оффлайн
  • Сообщений: 1274
  • Некромансеры "живы"!
  • Awards Орден 'За заслуги перед форумом I степени' Активным участникам сходок - 2013 За релиз ЮниМода За набор курсоров для Windows За разгадку главного секрета Nox Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

Если ты сделаешь вещь, которой реально можно будет пользоваться, то тут можно будет найти пару человек, которых она заинтересует.
Ты не хочешь тратить время на фикс библиотеки, а кто-то не хочет смотреть кусочки кода для глючного мода. Кажется, круг замкнулся.
Можешь не фиксить, а переписать, там в бранче UniMod2 лежит.... Остановился на создании юнитов.
Записан
Пользуйтесь UniMod-ом.

det

  • Пользователь
  • *****
  • Карма: 0
  • Оффлайн Оффлайн
  • Сообщений: 16
    • Просмотр профиля
    • Awards

Здравствуйте.
Я снова поставил нокс, дабы пройти кампанию спустя много лет, еще раз.
Но на это траз мне хочется поиграться с конфигами, с этим проблем нет, все необходимое я нашел. Только редактор карт вылетает.
Юнимод установил (правда он не запускается через NoxPatched_UniMod.exe, только через NoCD_U.exe), но как использовать эти функции в кампании?
В autoexec.lua я добавил функцию добавления предмета в инвентарь, хотел добавить посох ярости сразу или что нибудь еще, но не знаю как вызывать эту функцию.
Spoiler (click to show/hide)
Записан

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Открываете консоль и в ней пишете:
give('oblivionorb','Jack')
(вместо Jack впишите имя вашего персонажа).
Далее жмёте Enter и получаете Посох Забвения к себе в карман.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

det

  • Пользователь
  • *****
  • Карма: 0
  • Оффлайн Оффлайн
  • Сообщений: 16
    • Просмотр профиля
    • Awards

Спасибо большое за такой быстрый ответ, я даже успел найти это же решение на другом источнике.
К сожалению ваш вариант мне не подошел, потому что умолчательное имя персонажа я оставил на русском, а в игре переключиться или скопипайстить русского "Джек" мне не удалось.


Другой вариант выглядит так.
В начале функцией в консоли игры
setMe()
x,y=playerMouse(me)
получаем координаты, а потом
createObject("OblivionOrb",x,y)
Эти три строчки я внес в пустой текстовый файл с расширением .lua а в игре просто выполняю
dofile('ИМЯ_ФАЙЛА.lua')
Вот список id обьектов что мне удалось найти пока что.
А вот список id именно предметов .

Подскажите пожалуйста по еще нескольким вопросам:
1. Каким образом можно уменьшить затратность маны именно заклинанием молнии?
Потому что в конфигаг я находил только кол-во маны для обычных заклинаний.
2. Хотелось бы реализовать быстрое автоматическое восполнение маны, может луа скриптом? Но я не умею писать на нем к сожалению.
3. Можно ли сделать Посох молний самозаряжающимся?
4. Где можно найти наиболее полный список id предметов?
5. Как можно суммонить себе spellbooks, книги с заклинаниями? Потому что функция crSpell(spellN) конечно создает книги, например crSpell(SPELL_MAGIC_MISSILE), но игра говорит что я не могу ее использовать (при этом 2 уровня уже есть). Оказывается spellN означает номер, по этому книги не читабельны вообще. Но я не знаю где найти номера этих id получается.
Я сейчас подбором выписываю все заклинания, и отпишусь по результату.
« Последнее редактирование: 18/06/2015 23:34:19 от det »
Записан

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Раскладка переключается через Scroll lock.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

det

  • Пользователь
  • *****
  • Карма: 0
  • Оффлайн Оффлайн
  • Сообщений: 16
    • Просмотр профиля
    • Awards

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

Появляются они у курсора, командой
Цитировать
crSpell(НОМЕР)

НЕ все цифры создают рабочую книгу, ниже список работающих, и приводящих к вылету из игры.



Spoiler: Колдун (click to show/hide)
Spoiler: Маг (click to show/hide)
Spoiler: Вылеты (click to show/hide)
Остановился на 144, для воина способности видимо получаются по другому, как найду как - отпишусь.

На этом список закончился. Если нужно - переведу на англ и размещу в соответствующей теме.


Помогите мне пожалуйста с вопросами что я описал выше (кто может), уж очень хочется пройти одну из любимых игр с интересом "по-своему" ))
« Последнее редактирование: 19/06/2015 00:52:24 от det »
Записан

TheSim

  • Клан "NoX Craft"
  • Постоялец
  • *
  • Карма: 31
  • Оффлайн Оффлайн
  • Сообщений: 287
  • Awards Активным участникам сходок - 2013 За релиз ЮниМода Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

Воинская книжка - другой предмет кажись
Записан

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards

Да уж. Сюда никто не глянул: http://forum.noxworld.ru/modding/kooto-o-mo/?message=121340.
Специально сделал, дабы сил не тратил лишних.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

det

  • Пользователь
  • *****
  • Карма: 0
  • Оффлайн Оффлайн
  • Сообщений: 16
    • Просмотр профиля
    • Awards

Увы, не нашел, плохо искал )
Зато теперь список отсортирован)
К стати мне не удалось найти id оружия для мага, которое зачаровано, например "посох полний перезарядки", обычный я спавнить могу, а вот перезарядки как то не нашел.

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

То же с жизнями, что бы они восстанавливались оперативно, но при получении урона - реген прекращался, на некоторое время после получения урона, а потом восстанавливал постепенно.
« Последнее редактирование: 19/06/2015 19:00:15 от det »
Записан

TheSim

  • Клан "NoX Craft"
  • Постоялец
  • *
  • Карма: 31
  • Оффлайн Оффлайн
  • Сообщений: 287
  • Awards Активным участникам сходок - 2013 За релиз ЮниМода Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards

было получение и задание хитов юнита, unitHP(newValue)
https://github.com/Evengard/UniMod/blob/master/unit2.cpp
про ману - кажись нет, но тривиально написать
Записан

det

  • Пользователь
  • *****
  • Карма: 0
  • Оффлайн Оффлайн
  • Сообщений: 16
    • Просмотр профиля
    • Awards

Спасибо, правда я надеялся это сделать возможностями юнимода, через lua, а с C++ я не знаком, увы)
Как альтернатива я смог вычислить значения в памяти через cheat engine, там на луа скрипт написать уже можно.
И естественно задать нужные параметры для скорости восстановления, модификаторы и пр.
Да и удобно, что можно воспользоваться встроенным генератором уже трейнера экзешника, своего, без вирей.
Записан
Расширенный поиск  
 

Страница сгенерирована за 0.092 секунд. Запросов: 20.