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

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

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

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

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


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

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

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

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards
Делимся скриптами
« Ответ #0 : 06/05/2012 04:34:00 »

Предлагаю выкладывать готовые (и рабочие, естественно :) )скрипты для Unimod'а и редактора карт, а также инструкцию по их эксплуатации здесь.

Начнём. Вот мой скрипт "записи игры". Сейчас он основан на записи скринов через определённый интервал в кадрах:

isRecording=false

function Rec()
isRecording=true
print('Запись началась')
RecEngine()
end
function RecEngine()
if isRecording == true then conExec('image');setTimeout(RecEngine,4) end
end
function StopRec()
isRecording=false
print('Запись остановлена')
end

На работу этого скрипта можно посмотреть, просмотрев ролик: http://www.youtube.com/watch?v=Sed315tMbgo

Разъясню функции:
Rec() запускает процесс записи. StopRec(), соответственно, останавливает.
RecEngine() - движок "съёмщика". В нём всего одна строка. В ней Вы можете настраивать плавность съёмки скринов:
setTimeout(RecEngine,4)Изменяйте выделенное число, чтобы увеличить или уменьшить плавность съёмки. Помните, что чем меньше это число, тем выше нагрузка на Ваш компьютер. Рекомендуемые пределы: 3-5 кадров. Если Вы выберите меньше 3х, то пойдёт бесполезная нагрузка на компьютер (да и места на Вашем HDD понадобится намного больше), а если выберите больше 5, то пропадёт плавность движения.
У меня на компьютере при съёмке данным скриптом FPS Nox'а прыгал на уровне 20. На задержке 5 - на уровне 30-35 FPS. Всё зависит от мощности Вашего компьютера.

P.S>Помните, что данный скрипт звуки не записывает! :) А это значит, что звук пока нужно записывать отдельным файлом.
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

Norten

  • Старожил
  • *****
  • Карма: 101
  • Оффлайн Оффлайн
  • Сообщений: 840
  • Пью пока Синвент афк...
  • Awards Лучший организатор игр 2010 За поддержку форума 2010 Лучший дизайн
    • Просмотр профиля
    • Awards
Делимся скриптами
« Ответ #1 : 06/05/2012 16:46:31 »

Или озвучивать с прищепкой на носу  :)

Классная тема, спасибо, Герман!
Записан
Крошка-Маг спамил ракетами до того как это стало мэйнстримом @}>->--

TheSim

  • Клан "NoX Craft"
  • Постоялец
  • *
  • Карма: 31
  • Оффлайн Оффлайн
  • Сообщений: 287
  • Awards Активным участникам сходок - 2013 За релиз ЮниМода Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards
Делимся скриптами
« Ответ #2 : 12/05/2012 23:53:18 »

Кстати мне в голову пришла идеязаставить сервак скринить последний фраг на форум. Требуется небольшой скрипт на форуме, код для Post-отправки файла кажись внутри Unimod-а уже есть, если нет - могу добавить.
Записан

Evengard

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

На серваке отключена графическая часть (флаг serveronly), забыл?
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

2530

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

Для удобства тестирования новых текстур и скриптов связаных с FPS, перемещением NPC и прочего, я написал скрипт, который назвал "DebugMode".
Что же делает этот DebugMode? Если в консоли ввести setDebugMode(), то произойдёт следующее:
1. Включится показ экстентов;
2. Включится показ областей взаимодействия и путей перемещения NPC (команда show ai)
3. Включится показ FPS, Ping'а, информации о тайминге, информации о количестве рисуемых объектов на экране, количество отправляемых\принимаемых байт, номер кадра с момента старта сервера и прочая информация.
4. (Самое интересное) Включится FPS ограничитель на 30 FPS.
Функция unsetDebugMode() выключает этот кошмар и возвращает всё как было :)


Быстродействие:
Первое включение скрипта: 5-60 сек.
Последующие включения скрипта: 5-25 сек.
Выключение скрипта: менее 1 сек.


Системная информация:
setDebugMode() возвращает 0 (если режим уже запущен) или 1 (если режим запущен успешно)
unsetDebugMode() возвращает 0 (если режим уже выключен) или 1 (если режим выключен успешно)
Для выполнения требуется команда racoiaws!!!
P.S>Надо быть честным со всеми, поэтому распишу код, который будет наиболее полезным:
Команда "show extents" - включает показ экстентов
Команда "show ai" - включает показ ai
Команда "show gui" - включает\отключает игровую панель
Команда "show perfmon" - включает показ Debug информации.
Команда "set frameratelimiter" - включает ограничитель FPS. "unset frameratelimiter" - выключает его. Требуется много времени при 1м включении лимита. Последующие включения проходят намного быстрее

P.P.S>И закончу переделанной фразой Рексара из игры, название которой произносить здесь опасно для жизни :) :
Цитата: 2530
"Команды написал я, но за последствия, которые возникли после их использования, отвечаете Вы..."

UPD>Простите, забыл сказать. Скрипт был написан с учётом того, что у Вас есть флаг -nolimit на EXE'шнике!
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

Evengard

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

Спс что напомнил. Пора заканчивать эту лафу с нолимитом
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

Squall

  • Глобальный модератор
  • Старожил
  • **
  • Карма: 132
  • Оффлайн Оффлайн
  • Сообщений: 1170
  • I will always be here.
  • Awards Медаль 'За написание статьи о Воине'
    • Просмотр профиля
    • Awards
Делимся скриптами
« Ответ #6 : 14/05/2012 18:12:45 »

Извините, товарищи, лафа лафой, только ничего, что моя ноутбучная система при всей свой крутизне выдает 20 фпс без нолимита? Я слайд-шоу смотреть не хочу. И не сказал бы, что жалкие 50 кадров, это то, что следует ограничивать. Тем более, что бытует у геймеров мнение, что в файтинги, шутеры и иные динамичные игры комфортней всего играть с фпс = 60. Другое дело, когда фпс под двести... Предлагаю тогда хоть повысить планку ограничителя до адекватного числа, если собираетесь запиливать его на сервер.
Записан
Spoiler (click to show/hide)

2530

  • Гильдия The Pinnacle
  • Старожил
  • *
  • Карма: 79
  • Оффлайн Оффлайн
  • Сообщений: 665
  • Не вижу смысла в Nox 2
  • Awards Победитель конкурса "Угадай Автора Карты" 2015
    • Просмотр профиля
    • Awards
Делимся скриптами
« Ответ #7 : 14/05/2012 18:29:45 »

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

Evengard

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

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

Другое дело что оч странно что ограничитель занижает до 20. Должен поидее до 30... Надо будет поискать на досуге что ьпм да как.
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

TheSim

  • Клан "NoX Craft"
  • Постоялец
  • *
  • Карма: 31
  • Оффлайн Оффлайн
  • Сообщений: 287
  • Awards Активным участникам сходок - 2013 За релиз ЮниМода Знак 'За тягу к тайнам Nox'
    • Просмотр профиля
    • Awards
Делимся скриптами
« Ответ #9 : 17/05/2012 20:04:49 »

На серваке отключена графическая часть (флаг serveronly), забыл?
Пичаль!
Записан

Dio

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

В принципе можно выпилить флаг -nolimit из нокс нафиг, будет не сложно. А например на сервак нельзя будет зайти если версия < какой то)
Там нет такого определенного FPS лимитера как параметра. Нашел место где считается время и запускается следующая обработка, но разобраться с ней не смог.
Записан
Пользуйтесь UniMod-ом.

Lаrboss

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

Ты хочешь сделать FPS лимитер? Пощади нас, продвинутых геймеров!
Записан
Отец читеров

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

Никогда не пробовал играть в какуюнить игру с фпс 25-30? =)
Записан
Отец читеров

Evengard

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

Я только на таких ФПСах и играю. А то и ниже. В т.ч. в Нокс.

А почему это столь критично для Нокса я уже объяснял.
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

Katarsis

  • Старожил
  • *****
  • Карма: 99
  • Оффлайн Оффлайн
  • Сообщений: 726
  • Возрождение
  • Awards Медаль 'За написание статьи о маге' Активным участникам сходок - 2013 3 конкурс карт - выбор администрации 3 конкурс карт - лучший геймплей Знак 'Создателю самых уютных болот'
    • Просмотр профиля
    • Awards

Evengard, а идеи завышать всем пинг вплоть до некоей цифры (скажем, 120) не возникало? Предпосылки-то, по сути, те же самые...
Записан

Evengard

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

Мощности компов хватит не всем. Вот, например даже мне. Встроенная видюха - унылая штука...
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

Katarsis

  • Старожил
  • *****
  • Карма: 99
  • Оффлайн Оффлайн
  • Сообщений: 726
  • Возрождение
  • Awards Медаль 'За написание статьи о маге' Активным участникам сходок - 2013 3 конкурс карт - выбор администрации 3 конкурс карт - лучший геймплей Знак 'Создателю самых уютных болот'
    • Просмотр профиля
    • Awards

Так с интернетом дела и того хуже :O
Записан

Perfect

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

Ребят, вы не туда пишете...

unseen: да и твоё сообщение не по теме.
« Последнее редактирование: 09/06/2012 16:48:11 от unseen »
Записан

2530

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

Тема уже давно не обновлялась, поэтому пора добавить пару скриптов для Unimod сюда:
1. Запись ника хоста. Ник можно будет получить через hostname. (вызов функции должен быть прописан в Autoexec.rul или в функции onFirstFrame() в autoexec.lua!!!)
hostname=nil
function getHost()
local pl = playerList()
hostname=playerInfo(pl[1]).name
end
2. Улучшенное создание объекта. Теперь если вы укажете ник игрока (nick), то предмет (x) будет создан в координатах его мыши. Также вы можете получить последний созданный объект через переменную lastCreatedObj
--Create Object At Player's Mouse
lastCreatedObj=nil
function cr(x,nick)
 if nick==nil then nick=hostname end
 local r
 r=createObject(x,playerMouse(playerGetByName(nick)))
 if r==nil then print('ERROR>Unable to create object "'..x..'" at '..nick..'\'s mouse. Invalid object.') else lastCreatedObj=r end
 return r
end
--
3. Скрипт, который я называю: "Как заставить камень\Урчина\Гекубу\Некроманта\Игрока "CrazyBrony"\Кого_угодно заговорить?".
function sayobj(text,obj)
if obj==nil then obj=playerGetByName(hostname) end
createBubble(obj,text)
end
В качестве аргументов передаётся текст (text) и объект-userdata (obj). Пример работы во вложении.

Здесь не используется слишком много хитрых функций. Только то, что заложено разработчиками Unimod 0.6 pre-beta.
В 1м коде достаётся 1 игрок из игровой таблицы и значение параметра name заносится в hostname переменную.

2я функция не намного сложнее. Здесь изменён источник с me на функцию возврата игрока(playerGetByName(nick)). Если код не сработал и в консоли появилось "Not found", значит игрока с заданным ником нет на сервере. Если ник не указан, то будет взят игрок-хост(см. 1й код)

3я функция это почти то же самое, что и просто createBubble, но в этой функции предотвращена передача пустого значения nil (вместо nil будет передан игрок-хост (см. 1й код)) Если как объект будет передан игрок, то над ним появится облако подобное сообщению в чате, но регистрации в логе консоли не будет, как в команде say.

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

Evengard

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

Вообще ник хоста можно получить всегда (без необходимости onFirstFrame) при помощи playerInfo(playerGetById(31)).name
ID хоста всегда 31, нумерация всех остальных с нуля, по очереди кто заходит.
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

2530

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

Решил обнародовать изменение уровня Nox Quest. Код здесь:
SYS_MEMDATA_BUFFER=nil
function getQuestLevel()
getMemData("5997868","int")
end
function getMemData(address, datatype)
local gamedir=getGameDirectory()
os.execute(gamedir.."\\memeditor\\nox_mem.exe get "..datatype.." "..address.." "..gamedir.."\\memeditor\\buffer.dat")
setTimeout(continueGettingData,90)
end
function continueGettingData()
local gamedir=getGameDirectory()
f = io.open(gamedir.."\\memeditor\\buffer.dat","r")
while true do
        line = f.read(f)
        if not line then break end
        print (line)
        end
end
function setIntMemData(address, value)
local gamedir=getGameDirectory()
os.execute(gamedir.."\\memeditor\\nox_mem.exe set int "..address.." "..value)
end
function setQuestLevel(level)
if type(level)~="number" then return end
setIntMemData("5997868",level)
setIntMemData("6945128",level)
end

Инструкция:
1. Создайте новый lua файл и скопируйте код туда.
2. Скачайте архив с программой memeditor (8 KB) и распакуйте его в корневую папку Nox.
Убедитесь, что nox_mem.exe лежит в папке memeditor!
3. Запустите Unimod. Загрузите ваш файл lua. Для установки левела используйте функцию setQuestLevel(новый уровень в виде числа). Для его чтения: getQuestLevel(). Значение функции будет лежать в SYS_MEMDATA_BUFFER в виде числа - текущего уровня

Примечание:
Поскольку в Unimod 0.6 нет работы с памятью напрямую (только через некие юнитконтроллеры), мне пришлось реализовать программу memeditor. Она просто меняет\читает данные из памяти. Существенный недостаток программы: сервер альтабается.
Также я полный нуб в плане кодинга для юнимода и несмотря на то что вышенаписанное работает, я не могу сказать, что код получился удачный. Если кто реализует лучше (а ещё лучше, если это добавят в Unimod) буду только рад.

Дополнительная техническая информация:
Уровень Nox Quest определяется двумя DWORD переменными.
Смещение в памятиЧто означает
0x005B852CОпределяет "следующий" уровень Nox Quest. Он будет увеличен на 1 по достижению выхода и игрока кинет на следующий уровень, после указанного. Пример: Сейчас 10й уровень. Если вы задали уровень 100, то команду, по достижении всеми её игроками выхода, кинет на 101й уровень. Если задали 1000й, то кинет на 1001 и т.п.
0x0069F968Определяет текущий уровень Nox Quest. Если изменить эту переменную, то мобы и обелиски сразу изменят свои показатели здоровья, а также изменится урон по игроку. Проблемы данной переменной:

1. Уже играющим клиентам новый текущий номер уровня не приходит. Придёт только после смены карты или после переприсоединения. То есть, если был уровень 10, а вы сменили на 100, то на сервере будет написано "Level 100", а у клиентов (которые были до момента смены переменной) написано "Level 10". Любой присоединившийся после смены переменной получит правильный уровень.
2. Качество вещей и количество поднимаемого золота не меняется, так как они сгенерированы до смены уровня.
Несмотря на то, что переменные DWORD типа, не рекомендую поднимать уровень выше 65535 (переменная отображаемого лвла обнуляется + моя программа поддерживает только INT пределы.) Также не рекомендуется писать разные значения для этих переменных. Меняйте оба места.

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

Evengard

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

Вообще-то есть функции правки памяти в UniMod-е, но они отсутствуют намерено, чтобы такие изменения вносить непосредственно в сорцы ЮниМода - в основной репозиторий. Рекомендую обновить сам ЮниМод в этой связи скорее.
Попробую запилить в ЮниМод на досуге если кому-то это интересно.
« Последнее редактирование: 22/05/2013 10:25:32 от Perfect »
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

2530

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

Работая с lua, я столкнулся с проблемой получения строки. Алгоритм непривычный, если сравнивать с VB. Поэтому я написал свои функции получения подстрок. Думаю, это может пригодится кому-нибудь.
Получение правой части строки:
function string.right(str,len)
return string.sub(str,#str+1 - len)
end
Инструкция:
string.right принимает 2 значения как в старом добром VB: строку и длину.

Получение левой части строки:
function string.left(str,len)
return string.sub(str,0,len)
end
Инструкция:
string.left также принимает 2 значения: строку и длину

Получение подстроки.
function string.mid(str,pos,len)
return string.sub(str,pos,pos+len-1)
end
Инструкция:
string.mid возвращает подстроку подобно string.sub, но запрашивает вместо индекса последнего индекса длину строки (подобно string.Substring в C# или Mid в VB). Иными словами:

string.mid("INTEGER",2,4) = string.sub("INTEGER",2,5) = "NTEG"
Записан
Карма рассчитана на индикацию среднего отношения к участнику, а не степень важности человека. Не гонитесь за ней.
Все мои видео и Twitch стримы

Evengard

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

string.sub аналогичен substr во многих ЯП (C/C++, PHP), честно говоря особо не переучивал бы людей. Впрочем, может кому и пригодится.
Записан
Не упоминай администраторов всуе...
С уважением, TriOptimum Corporation

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

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