Архив сообщества
2011 — 2019
Аватар Kinrany

NTSL Реквесты

Автор: Kinrany · 02.04.2015, 00:43 · 23 сообщений

Сообщений в теме: 23

Kinrany#1
Упоролся скриптами для телекома. Оставляйте тут свои реквесты, и я что-нибудь напишу.

P.S. буду благодарен, если кто-то поделится ссылкой на нормальную документацию
0
Скопировать ссылку
intercross#3
Kinrany (01 April 2015 - 14:43) писал: писал:
Упоролся скриптами для телекома. Оставляйте тут свои реквесты, и я что-нибудь напишу.

P.S. буду благодарен, если кто-то поделится ссылкой на нормальную документацию
Проверь, пожалуйста, является ли память отдельной для каждого канала, или общая на телекомм. А то мне лень.

По-моему на вики достаточно информации, всё описано.
0
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)
Скопировать ссылку
tizit#4
Я пилил замену сообщений на определенный текст (на Таню и паучка конечно же)). Но это секретный скрипт, он даёт силу, а вместе с ней и ответственность.
0
Спойлер
Цитата
Собственно, форумные кукаретики как всегда в ударе и извернули всё так, как им удобно.
Скопировать ссылку
intercross#5
tizit (02 April 2015 - 02:33) писал: писал:
Я пилил замену сообщений на определенный текст (на Таню и паучка конечно же)). Но это секретный скрипт, он даёт силу, а вместе с ней и ответственность.
Уверен, что это mem для записи текущей строки, кучка свитчей и проверка с переносом на начало.
0
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)
Скопировать ссылку
Kinrany#6
Более-менее  уверен, что память своя для каждого сервера.
На вики недостаточно подробно. Например, не сказано, что возвращает mem(), когда значение не задано.
0
Скопировать ссылку
intercross#7
Kinrany (02 April 2015 - 02:59) писал: писал:
Более-менее  уверен, что память своя для каждого сервера.
На вики недостаточно подробно. Например, не сказано, что возвращает mem(), когда значение не задано.
>Returns null/0 if not found
0
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)
Скопировать ссылку
tizit#11
intercross (02 April 2015 - 02:37) писал: писал:
Уверен, что это mem для записи текущей строки, кучка свитчей и проверка с переносом на начало.
Нит, не совсем. Нужно разбивать на предложения по ". ", вставлять в массив (лист, я хз как там называется) и вытаскивать по номеру. Но там есть проблемка, т.к. всё это дело вызывается при любом входящем сообщении на любой частоте, а выводится только на общий канал, то целостность текста нарушается, и надо делать проверку на канал в самом начале.

Вот ещё что вспомнил, иногда телекомы как-то лагают и пропускают сообщения, именно когда включено выполнение кода.

УПД
Все ссылочки по телекомам и коду на них, которые я знаю.
https://tgstation13.org/wiki/NT_Script
https://tgstation13....ki/NTSL_Scripts
https://tgstation13....ecommunications
0
Спойлер
Цитата
Собственно, форумные кукаретики как всегда в ударе и извернули всё так, как им удобно.
Скопировать ссылку
Kinrany#12
Цитата
т.к. всё это дело вызывается при любом входящем сообщении на любой частоте, а выводится только на общий канал
Что. Ты же можешь проверять и изменять $freq.


Ссылки на функции хранить нельзя ведь?
0
Скопировать ссылку
intercross#13
Kinrany (02 April 2015 - 03:14) писал: писал:
Ладно, плохой пример, но там полно функций с неопределенным поведением.
К примеру?
0
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)
Скопировать ссылку
Kinrany#14
intercross (02 April 2015 - 07:47) писал: писал:
К примеру?
У процедур не указано возвращаемое значение. У всех или почти всех не описано поведение при некорректном вводе.

Ну и ещё я подозреваю, что там есть скрытый функционал. Например, есть встроенная implode(), но она даже не упомянута.

Upd.
Ещё не написано, что broadcast() с пустой строкой в качестве сообщения выдаёт "*beep*" и срабатывает только один раз.

Upd.
Переменные по умолчанию имеют значение пустой строки, и вроде как некоторые функции возвращают её при некорректном вводе.
Сообщение отредактировал Kinrany: 02 April 2015 - 10:48
0
Скопировать ссылку
tizit#15
Kinrany (02 April 2015 - 07:09) писал: писал:
Что. Ты же можешь проверять и изменять $freq.


Ссылки на функции хранить нельзя ведь?
Я делал выполнение кода на коммон сервере, как оказалось, он выполняет код при сообщений на любой из каналов, хотя я думал, что коммон - это 145.9.

Про функции точно не знаю. Там есть две памяти - одна память сервера, в неё можно записывать через mem(). Она существует пока не нажмешь кнопку очистить server memory. Вторая память - это память компа. Например, ты написал программу, определил там какие-то переменные и функции. После запуска, всё это добавляется в память, но после завершения программы - удаляется. Думаю что сохранить функцию на сервер, а потом загружать её оттуда и выполнять не получится.
0
Спойлер
Цитата
Собственно, форумные кукаретики как всегда в ударе и извернули всё так, как им удобно.
Скопировать ссылку
Kinrany#16
Дописал костыль, определяющий тип переменной.

////////////////////
// type.ntsl ///////
////////////////////

$TYPE_Number = "num";
$TYPE_String = "str";
$TYPE_Vector = "vect";
NULL = "";

def typeof($var) {
	if ($var == NULL) {
		return NULL;
	}
	elseif (isnum($var)) {
		return $TYPE_Number;
	}
	elseif (isvect($var)) {
		return $TYPE_Vector;
	}
	elseif (isstr($var)) {
		return $TYPE_String;
	}
	else {
		DEBUG_Broadcast("STR Fatal Error in typeof()");
		return NULL;
	}
}

def isnum($var) {
	$x = $var + 0;
	if ($x == $var) {
		return TRUE;
	}
	else {
		return FALSE;
	}
}

def isvect($var) {
	$cp = copy($var, 0, 0);
	if ($cp == NULL) {
		return FALSE;
	}
	else {
		return TRUE;
	}
}

def isstr($var) {
	$str = 0 + $var;
	$num = tonum($str);
	if ($num == NULL) {
		return FALSE;
	}
	else {
		return TRUE;
	}
}

Сообщение отредактировал Kinrany: 02 April 2015 - 15:09
0
Скопировать ссылку
intercross#17
Kinrany (02 April 2015 - 09:01) писал: писал:
У процедур не указано возвращаемое значение. У всех или почти всех не описано поведение при некорректном вводе.

Ну и ещё я подозреваю, что там есть скрытый функционал. Например, есть встроенная implode(), но она даже не упомянута.

Upd.
Ещё не написано, что broadcast() с пустой строкой в качестве сообщения выдаёт "*beep*" и срабатывает только один раз.

Upd.
Переменные по умолчанию имеют значение пустой строки, и вроде как некоторые функции возвращают её при некорректном вводе.
Окей, ты прав
0
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)
Скопировать ссылку
Kinrany#18
Kartag (01 April 2015 - 14:45) писал: писал:
Скрипт, который переставляет слова случайным образом. Йодастанция тринадцать иди.
////////////////////
// debug.ntsl //////
////////////////////

$DEBUG_Freq = 1473;

def DEBUG_Broadcast($content) {
  broadcast($content, $DEBUG_Freq, "DEBUG", "Bot");
}

def DEBUG_ArgException($name) {
  DEBUG_Broadcast("Argument exception in " + $name + "().");
}


////////////////////
// type.ntsl ///////
////////////////////

NULL = "";

def isvect($var) {
  $cp = copy($var, 0, 0);
  if ($cp == NULL) {
	return FALSE;
  }
  else {
	return TRUE;
  }
}


////////////////////
// vector.ntsl /////
////////////////////

// head [1, "a", 3] -> 1
def head($vector) {
  if (!isvect($vector) || length($vector) == 0) {
	DEBUG_ArgException("head");
	return NULL;
  }

  return at($vector, 1);
}

// last [1, "a", 3] -> 3
def last($vector) {
  $length = length($vector);

  if (!isvect($vector) || $length == 0) {
	DEBUG_ArgException("last");
	return NULL;
  }

  return at($vector, $length);
}

//shuffle [1, 2, 3, 4] -> [2, 4, 3, 1]
//shuffle [1, 2, 3, 4] -> [1, 3, 4, 2]
def shuffle($vector) {
  $shuffled = $vector;
  $length = length($shuffled);

  if (!isvect($shuffled) || $length == 0) {
	DEBUG_ArgException("shuffle");
  }

  $index = 1;
  while ($index < $length) {
	$rand = rand($index, $length + 1);
	swap($shuffled, $index, $rand);

	$index += 1;
  }
  return $shuffled;
}


def yoda($string) {
  $string = lower($string);
  $string = replace($string, ",", " ");
  $string = replace($string, ".", " ");
  $string = replace($string, "!", " ");

  $expld = explode($string, " ");
  $shuffled = shuffle($expld);
  $length = length($shuffled);

  $first = head($shuffled);
  $first = proper($first);
  at($shuffled, 1, $first);

  $last = last($shuffled);
  $last += ".";
  at($shuffled, $length, $last);

  $string = implode($shuffled, " ");
  return $string;
}

$content = yoda($content);

Пойду запущу на грине
Сообщение отредактировал Kinrany: 03 April 2015 - 12:26
1
Скопировать ссылку
Kinrany#20
Скрипт вроде работает. Хорошо проверить не получилось, на грине слишком сложно дойти от шаттла до телекома.

Upd.
Случайно обнаружил, что broadcast() срабатывает только один раз для каждого сообщения. Если сделать:
broadcast("hello world");
broadcast("hello world");
То в основном канале будет только одно сообщение.
Сообщение отредактировал Kinrany: 03 April 2015 - 15:24
0
Скопировать ссылку
intercross#21
Kinrany (03 April 2015 - 09:29) писал: писал:
Охренеть, replace() выдает null, если третий аргумент - null.
Ну ты же не можешь вставить в строку null, вот строка и превращается в null

Kinrany (03 April 2015 - 12:28) писал: писал:
Скрипт вроде работает. Хорошо проверить не получилось, на грине слишком сложно дойти от шаттла до телекома.

Upd.
Случайно обнаружил, что broadcast() срабатывает только один раз для каждого сообщения. Если сделать:
broadcast("hello world");
broadcast("hello world");
То в основном канале будет только одно сообщение.
Да, там стек запросов же
0
Игровая конференция в ТСе: wetskrells.net
Мы вам рады.

Мокрые скреллки (WIP)
Скопировать ссылку
Kinrany#22
Цитата
Ну ты же не можешь вставить в строку null, вот строка и превращается в null
Тут null == "", было бы логично при вставке null в строку возвращать ту же строку.

Где NTSL лежит в коде станции? Нет, хватит с меня, проще сделать собственные стандартные функции.
0
Скопировать ссылку

Обратно в Идеи