Function not found + полезности

Anything and all.

Moderators: Murderator+, Murderator

Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Это снова я :) Теперь я со скриншотами, хотя с ними я уже вроде был.. В этот раз я реализовал раскладывание скриншотов по папочкам, для наибольшего удобства.

Code: Select all

; Функция создаёт выбранную директорию, если такая ещё не существует
; Проверка на существовании осуществляется через пустой файл is_dir.
; (c) 2007, Destruction.
Sub mkdir( dir )
	if not right( dir, 1 ) == "/" && not right( dir, 1 ) == "\" then
		dir = dir + "/"
	endif
	var f = file( dir + "is_dir" )
	if not f.open() then
		uo.launch( "cmd", '/c mkdir "' + dir + '"' )
		wait( 500 )
		f.create()
	endif
	f.close()
endsub
Вроде неплохо извернулся учитывая неумение инжы работать с папками как таковыми.. Из минусов - я не помню как писать такое под вин98.

Далее - две функции для определения даты / времени, вариант от mihail мне не понравился как минимум замещением стандартной ф-ции date на его:

Code: Select all

; Определение текущей даты
; n - разделитель
; Destruction
Sub getDate( n )
	var d = str( uo.date() )
	if strlen( d ) == 5 then
		d = "0" + d
	endif
	return right( d, 2 ) + n + mid( d, 2, 2 ) + n + left( d, 2 )
endsub

; Определение текущего моммента времени
; n - разделитель
; Destruction
Sub getTime( n )
	var t = str( uo.time() )
	if strlen( t ) == 5 then
		t = "0" + t
	endif
	return left( t, 2 ) + n + mid( t, 2, 2 ) + n + right( t, 2 )
endsub
Ну и непосредственно ф-ция создания скриншота, для которой все вышенаписанное писалось:

Code: Select all

; Destruction
var sc_dir = "./sc/" ; Папка для складывания скриншотов.
Sub snap()
	var filetype = "BMP" ; в каком формате сохранять скриншоты
	var filename = sc_dir
	mkdir( filename )
	filename = filename + uo.getInfo( "shard" ) + "/"
	mkdir( filename )
	filename = filename + uo.getInfo( "character" ) + "/"
	mkdir( filename )
	filename = filename + getDate( "." ) + " " + getTime( "-" )
	uo.snap( filetype, filename + "." + filetype )
endsub
Примечание: при первом запуске на персонаже / шарде будет небольшая задержка перед созданием первого скриншота.

PS: Injection пока не умеет сохранять скриншоты в JPG, а у меня в БМП они весят по 5мб, поэтому всем у кого проблемы с местом могу посоветовать заглянуть в гугл: http://www.google.ru/search?hl=ru&q=com ... verter&lr= и использовать для последущей конвертации одну из найденных программ (я использую ImageMagick, т.к. привык, новичкам будет непросто освоить). Но это собственно говоря сами.
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

Иногда возникает проблема чистки реестра от значений EasyUO, но поскольку в инжекте такая возможность не предусмотрена приходится придумывать из раздела "сделай сам".. утилитка (зеркало) для удаления заданных ключей ИзиУО - кидаем в C:\WINDOWS\system32 и запускаем из инжекта:

Code: Select all

uo.exec("launch rmEasyUO 100") ; где 100 имя ключа
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

иногда в инжекте не хватает возможности передвигать курсор мыши на заданные координаты, эта улилитка вам в этом поможет.
Скачиваем, кидаем в папку C:\WINDOWS\system32, далее в инжекте

Code: Select all

uo.exec("launch SetCursorPos 555,444") ; где 555 - координата X, 444 - Y соответственно
ВНИМАНИЕ!!! для корректной работы необходимо указывать АБСОЛЮТНЫЕ координаты (на вкладке скриптового модуля в инжекте определяются относительные), абсолютные координаты можно узнать в UOPilot'е

----
update абсолютные координаты можно так же определять утилиткой в след. посте
Last edited by Mihail on 2008-01-07 15:55:16, edited 1 time in total.
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

утилита для определения абсолютных координат
как всегда кидаем в папку c:\windows\system32
Программа при запуске копирует текущие координаты мыши в буфер обмена и вырубается

Code: Select all

uo.exec("launch GetCursorPos") ; пример использования функции получения абсолютных координат 
далее в скрипте Ctrl+V :)

----
Использование:

вставляем скрипт

Code: Select all

sub uoCopyCursorPos()
; копируем координаты куосра в буфер обмена
uo.exec("launch GetCursorPos")
end sub
далее делаем хоткей

Code: Select all

exec uoCopyCursorPos
наводим мышь куда нужно и запускаем с хоткея, затем в скрипте нажимаем "Paste" или Ctrl+V
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

утилита для копирования вашего текста в буфер обмена

Code: Select all

uo.exec("launch ClipboardSetText йа_криведко") ; пример использования копирования текста в буфер обмена - внимание НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ ПРОБЕЛЫ
использование в инжекте:

Code: Select all

sub uoCopy(Text)
uo.exec("launch ClipboardSetText " + Text)
end sub
пример что с этим можно сделать:

аналог uo.info, только с мелкими доработками, в числе которых автоматическое копирование в буфер типа предмета

Code: Select all

sub uoInfo()
  var o, layer
  uo.addobject('object for information')
  while uo.targeting()
    wait(100)
  wend
  o = uo.getserial('object for information')
  layer = uo.getlayer(o)
  if layer=='*' then
    layer='0'
  end if
  uo.click(o)
  checklag()
  uo.textclose()
  uo.exec("set toptext 1")
  uo.textopen()
  uo.exec("set toptext 0")
  uo.textprint('ID='+o+' Type='+uo.getgraphic(o)+' Name='+uo.getname(o))
  uo.textprint('Quantity: '+str(uo.getquantity(o))+' Color: '+uo.getcolor(o)+' Layer: '+layer)
  uo.textprint('X='+str(uo.getx(o))+' Y='+str(uo.gety(o))+' Z='+str(uo.getz(o))+' C='+uo.containerof(o))
  uo.textprint()
  uoCopy(uo.getgraphic(o))
end if
end sub
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

Написал улучшенный Drag
Как всегда кидаем в system32
И внимательно читаем как использовать.

uo.exec("launch uoDrag x,y,x1,y1,delay,steps")
x,y - координаты отправной точки (не забывает - абсолютные)
x1,y1 - координаты точки прибытия
так же опционально (не обязательно) можно задать:
delay* - задержка после перетаскивания курсора перед "отпусканием" кнопки мыши
steps - если нужно чтобы мышка перетаскивалась медленно, то задав этот параметр программа просчитает промежуточные точки остановки (вы задаете количество точек - чем больше, тем медленнее) - точки рассчитываются по кратчайшему расстоянию - тоесть по прямой.
* в случае, когда задан параметр steps, delay - это время ожидания после каждой точки - оптимально 10-500

Code: Select all

uo.exec("launch uoDrag 280,740,880,350,100,10")
если надо быстро переместить, то

Code: Select all

uo.exec("launch uoDrag 280,740,880,350,20")
Не рекоммендую совсем убирать задержку (хотя технически это можно) т.к. предмет\гамп и т.д. может просто не успеть "захватиться"
Так же не забываем, что никаких пробелов в передаваемых параматрах быть не должно.. (на случай если кто невзирая на мою определялку координат будет всеравно вставлять их из пилота - он ставит пробел после запятой :) )
И проверок от дурака тоже не много :) так что если кому вдруг придет в голову указать 2 соседних пикселя и поставить интервал в 100 шагов, то 98 шагов курсор будет стоять на месте.. и все в таком духе..
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

утилитка для открытия гиперссылок (в том числе и локальных)
Как всегда кидаем в C:\Windows\system32
Далее запускаем из инжекта, передавая в качестве параметров адрес ссылки. Работает аналогично проводнику.

Code: Select all

uo.exec("launch OpenLink http://uo.com")

Code: Select all

uo.exec("launch OpenLink C:\")
send mail (mailto:123@123.com) etc.

и помните - никаких пробелов в параметрах
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Mihail
Expert!
Posts: 548
Joined: 2005-05-20 20:30:10
Contact:

Post by Mihail »

утилитка для запуска приложений на заданном процессоре\ядре процессора (зеркало)
Если надо запустить определенное приложение на определенном ядре многоядерного процессора.
Кидаем в c:\windows\system32

синтаксис использования:

Code: Select all

[путь к запускаемому приложению],[номер ядра]

Code: Select all

uo.exec("launch DualCore_Launcher D:\GAMES\UO\client.exe,1")
Чтобы рулить двухъядерными процессорами: 1 - первое ядро, 2 - второе, 3 - оба
Так же не стоит забывать что не должно быть пробелов в пути к запускаемому файлу..
[url=http://forum.yoko.com.ua/viewtopic.php?t=7379&start=15#69595][b]"плагины" для инжекта[/b][/url]
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Сортировка массива по алфавиту.

Code: Select all

Sub sort( arr, len )
	var i, j, r, temp
	for i = 1 to len -1
		j = i
		while j > 0
			r = getAlphaWord( arr[ j ], arr[ j - 1 ] )
			if r == 1 then
				temp = arr[ j ]
				arr[ j ] = arr[ j - 1 ]
				arr[ j - 1 ] = temp
				j = j - 1
			else
				j = 0
			endif
		wend
	next
EndSub

Sub getAlphaWord( word1, word2 )
	var i, r, len = strlen( word1 )
	if strlen( word1 ) > strlen( word2 ) then
		len = strlen( word2 )
	endif
	for i = 0 to len -1
		r = getAlphaSym( word1[ i ], word2[ i ] )
		if not r == 0 then
			return r
		endif
	next
	if strlen( word2 ) > strlen( word1 ) then
		return 1
	endif
	if strlen( word1 ) > strlen( word2 ) then
		return 2
	endif
	return 0
	
EndSub

Sub getAlphaSym( sym1, sym2 )
	var i, alpha = "0123456789"
	alpha = alpha + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	alpha = alpha + "abcdefghijklmnopqrstuvwxyz"
	alpha = alpha + "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
	alpha = alpha + "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
	if sym1 == sym2 then
		return 0
	endif
	for i = 0 to strlen( alpha ) -1
		if alpha[ i ] == sym1 then
			return 1
		endif
		if alpha[ i ] == sym2 then
			return 2
		endif
	next
	return 0
EndSub
Пример использования:

Code: Select all

sub main()
	var i, len = 3
	DIM arr[val( str( len ) )]
	arr[0] = "Abc";
	arr[1] = "123"
	arr[2] = "1230"
	sort( arr, len )
	for i = 0 to len -1
		uo.print( arr[ i ] )
	next
end sub
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

I'm wrote:

Code: Select all

sub time(jor,n)
#Mihail
var i, t=''
var ser=str(jor)
for i=0 to len(ser)-2 step 2
t=t+mid(ser,i,2)+n
next
t=left(t,len(ser)+2)
return t
end sub

Code: Select all

sub time(jor,n) 
#Mihail
var ser=str(jor),t='' 
  if len(ser)==5 then 
    ser='0'+ser 
  else 
    if len(ser)==4 then
      ser='00'+ser
    end if
  end if
  t=left(ser,2)+n+mid(ser,2,2)+n+right(ser,2) 
  return t 
end sub
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

I'm wrote:Время и дата в нормальном формате (inside) by Mihail

Code: Select all

sub main()
uo.print(date(uo.date(),'.'))
uo.print(time(uo.time(),':'))
end sub
где jor - это время\дата в формате числа, а n - нужный вам разделитесь.

Code: Select all

sub date(jor,n)
#Mihail
var ser=str(jor), t=''
if len(ser)==5 then
ser='0'+ser
end if
t=right(ser,2)+n+mid(ser,2,2)+n+left(ser,2)
return t
end sub

Code: Select all

sub time(jor,n)
#Mihail
var i, t=''
var ser=str(jor)
for i=0 to len(ser)-2 step 2
t=t+mid(ser,i,2)+n
next
t=left(t,len(ser)+2)
return t
end sub
в функцию time надо тоже воткнуть проверку на длину строки 5 и дописку нуля вначале, без неё часы с полуночи до10 утра не ходят :D

Code: Select all

sub time(jor,n)
   var i, t=''
   var ser=str(jor)
   if len(ser)==4 then
      ser='00'+ser
   else if len(ser)==5 then
      ser='0'+ser
   endif
   for i=0 to len(ser)-2 step 2
      t=t+mid(ser,i,2)+n
   next
   t=left(t,len(ser)+2)
   return t
end sub
вот так нормально время показывает
Last edited by Millerbeer on 2013-12-07 21:03:32, edited 1 time in total.
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: Function not found + полезности

Post by Beyonder »

Работа с наборами (Set).
Отличаются от массивов тем, что намного быстрее выполняет функции add и delete (практически моментально) и хранит только уникальные значения.

Code: Select all

### SETS
Sub purgeSet(setName)
	var len = getSetLen(setName)
	var i
	
	if (len == 0) then
		return
	endif
	
	for i=0 to len-1
		setSetValue(setName,i,0)
	next
	setSetLen(setName,0)
endsub

Sub dumpSet(setName)
	UO.TextOpen() 
    UO.TextPrint("Printing set <"+setName+"> contents:"); 
	
	var i
	var len = getSetLen(setName)
	var value
	for i=0 to len-1
		value = getSetValue(setName,i)
		value = "["+str(i)+"] = "+value
		UO.Print(value)
		UO.TextPrint(value)
	next
endsub

Sub addSetValue(setName, value)
	var pos = getSetIndexOf(setName, value)
	
	if (pos >= 0) then
		return pos
	endif
	
	var len = getSetLen(setName)	
	setSetValue(setName,len,value)
	setSetLen(setName,len+1)
	
	return len
endsub

Sub setSetValue(setName, index, value)
	UO.SetGlobal('set_'+setName+'_'+str(index), value)
endsub

Sub getSetValue(setName, index)
	return UO.GetGlobal('set_'+setName+'_'+str(index))
endsub

Sub getSetIndexOf(setName, value)
	var len = getSetLen(setName)
	var i = 0
	var curValue
	
	if (len == 0) then
		return -1
	endif
	
	for i = len-1 to 0 step -1
		curValue = getSetValue(setName,i)
		if (curValue == value OR curValue == str(value)) then
			return i
		endif
	next
	
	return -1
endsub

Sub getSetLen(setName)
	return val(UO.GetGlobal('set_'+setName+'_cnt'))
endsub

Sub setSetLen(setName, length)
	UO.SetGlobal('set_'+setName+'_cnt',length)
endsub

Sub delSetIndex(setName, index)
	var len = getSetLen(setName)
	setSetValue(setName, index, getSetValue(setName, len-1))
	setSetLen(setName,len-1)
endsub

Sub delSetValue(setName, value)
	delSetIndex(setName, getSetIndexOf(setName, value))
endsub
К примеру я применил его в скрипте на списки игноров:
У меня часто бывает что два скрипта должны игнорить разные вещи, при этом иногда их резетить. К примеру скрипт на подсчёт точного количества шмоток в указанном контейнере должен игнорировать найденные шмотки, а потом их все резетить. Но он может зарезетить переменные другого скрипта, что есть плохо. Поэтому можно использовать это:

Code: Select all

### IGNORE LISTS
Sub addToIgnoreList(listName, object)
	var obj = UO.GetSerial(object)	
	if (obj == 0 OR obj == -1) then
		return
	endif
	addSetValue(listName,obj)
	UO.Ignore(obj,'on')
endsub

Sub delFromIgnoreList(listName, object)
	var obj = UO.GetSerial(object)	
	if (obj == 0 OR obj == -1) then
		return
	endif
	delSetValue(listName,obj)
	UO.Ignore(obj,'off')
endsub

Sub resetIgnoreList(listName)
	var i
	var len = getSetLen(listName)
	var obj
	
	if (len == 0) then
		return
	endif
	
	for i=0 to len-1
		obj = getSetValue(listName,i)
		UO.Ignore(obj,'off')
		setSetValue(listName,i,0)
	next
	setSetLen(listName,0)
endsub
Пример использования:

Code: Select all

sub testIgnoreList()
	var i
	for i = 0 to 5
		UO.FindType(-1)
		addToIgnoreList('list1','finditem')
		UO.FindType(-1)
		addToIgnoreList('list2','finditem')
	next
	
	UO.FindType(-1)
	UO.Print('Found items after ignore: '+str(UO.FindCount()))
	
	resetIgnoreList('list1')
	UO.FindType(-1)
	UO.Print('Found items after reset1: '+str(UO.FindCount()))
	
	resetIgnoreList('list2')
	UO.FindType(-1)
	UO.Print('Found items after reset2: '+str(UO.FindCount()))
endsub
Beyonder
Expert!
Posts: 388
Joined: 2005-04-23 10:19:43
Contact:

Re: Function not found + полезности

Post by Beyonder »

Улучшенный вариант explode-а, заполняет частями массив.

Code: Select all

Sub explodeToArr( string, pattern, arr, arrlength )
	var i, counter = 0, entry = 0
	for i=0 to strlen( string ) -strlen( pattern )
		if mid( string, i, strlen( pattern ) ) == pattern then
			counter = counter + 1
			if counter <= arrlength then
				arr[counter-1] = mid( string, entry, i-entry ) 
			else
				return counter - 1
			endif
			entry = i + strlen( pattern )
		endif
	next
	if (counter == 0) then
		arr[counter] = mid( string, entry, strlen(string)-entry )
		return counter+1
	else
		return counter
	endif
endsub
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re:

Post by Blood Slayer »

Destruction wrote:Ещё пачка свеженаписанных полезностей с использованием недавно найденной фичи (описал в разделе FAQ).

Полезности используют друг-друга, так, что с ошбками вроде "Function not found" - не приставать -)

Итак, функция первая -) Проверяет - есть ли в переданном массиве переменная. Если нет - возвращает -1, если есть - порядковый номер элемента массива.

Если вместо массива передать строку, а вместо строки - один символ, то функция вернёт первое вхождение символа в строке.

Регистронезависимый поиск работает значительно медленее, используйте только при острой необходимости!

Code: Select all

; int inArray( string, array, bool, int )
; str - какую строку искать
; arr - массив, в котором искать
; nocase - true, чтобы не учитывался регистр при поиске.
; arr_len - длинна переданного массива
Sub inArray( str, arr, nocase, arr_len )
	var i
	if nocase then
		str = StrToLower( str )
	endif
	for i=0 to arr_len-1
		if nocase then
			if StrToLower( arr[i] ) == str then
				return i
			endif
		else
			if arr[i] == str then
				return i
			endif
		endif
	next
	return -1
endsub
Собственно ещё две функции - StrToUpper и StrToLower, соответсвенно переводят переданную строку в верхний или нижний регистр.
Работают медленно, поэтому в режиме реального времени - не получится. Может пригодится для разовых преобразований.

Функции UpperWords и LowerWords возвращают массивы с русскими и англискими буквами соответствующего регистра. Чтобы всё сработало корректно - в функцию необходимо передать массив размером не менее 59 элементов (смотри функции StrToLower и StrToUpper).

Code: Select all

sub StrToLower( str )
	var num, i, j
	DIM lower[59]
	lower = LowerWords( lower )
	DIM upper[59]
	upper = UpperWords( upper )
	for i=0 to strlen( str )-1
		num = inArray( str[i], upper, 0, 59)
		if num > -1 then
			str = left( str, i ) + lower[ num ] + right( str, strlen( str ) -i -1 )
		endif
	next
	return str
endsub

sub StrToUpper( str )
	var num, i, j
	DIM lower[59]
	lower = LowerWords( lower )
	DIM upper[59]
	upper = UpperWords( upper )
	for i=0 to strlen( str )-1
		num = inArray( str[i], lower, 0, 59)
		if num > -1 then
			str = left( str, i ) + upper[ num ] + right( str, strlen( str ) -i -1 )
		endif
	next
	return str
endsub

Sub LowerWords(words)
	words[0] = "q"
	words[1] = "w"
	words[2] = "e"
	words[3] = "r"
	words[4] = "t"
	words[5] = "y"
	words[6] = "u"
	words[7] = "i"
	words[8] = "o"
	words[9] = "p"
	words[10] = "a"
	words[11] = "s"
	words[12] = "d"
	words[13] = "f"
	words[14] = "g"
	words[15] = "h"
	words[16] = "j"
	words[17] = "k"
	words[18] = "l"
	words[19] = "z"
	words[20] = "x"
	words[21] = "c"
	words[22] = "v"
	words[23] = "b"
	words[24] = "n"
	words[25] = "m"
	words[26] = "й"
	words[27] = "ц"
	words[28] = "у"
	words[29] = "к"
	words[30] = "е"
	words[31] = "н"
	words[32] = "г"
	words[33] = "ш"
	words[34] = "щ"
	words[35] = "з"
	words[36] = "х"
	words[37] = "ъ"
	words[38] = "ф"
	words[39] = "ы"
	words[40] = "в"
	words[41] = "а"
	words[42] = "п"
	words[43] = "р"
	words[44] = "о"
	words[45] = "л"
	words[46] = "д"
	words[47] = "ж"
	words[48] = "э"
	words[49] = "я"
	words[50] = "ч"
	words[51] = "с"
	words[52] = "м"
	words[53] = "и"
	words[54] = "т"
	words[55] = "ь"
	words[56] = "б"
	words[57] = "ю"
	words[58] = "ё"
	return words
endsub

Sub UpperWords(words)
	words[0] = "Q"
	words[1] = "W"
	words[2] = "E"
	words[3] = "R"
	words[4] = "T"
	words[5] = "Y"
	words[6] = "U"
	words[7] = "I"
	words[8] = "O"
	words[9] = "P"
	words[10] = "A"
	words[11] = "S"
	words[12] = "D"
	words[13] = "F"
	words[14] = "G"
	words[15] = "H"
	words[16] = "J"
	words[17] = "K"
	words[18] = "L"
	words[19] = "Z"
	words[20] = "X"
	words[21] = "C"
	words[22] = "V"
	words[23] = "B"
	words[24] = "N"
	words[25] = "M"
	words[26] = "Й"
	words[27] = "Ц"
	words[28] = "У"
	words[29] = "К"
	words[30] = "Е"
	words[31] = "Н"
	words[32] = "Г"
	words[33] = "Ш"
	words[34] = "Щ"
	words[35] = "З"
	words[36] = "Х"
	words[37] = "Ъ"
	words[38] = "Ф"
	words[39] = "Ы"
	words[40] = "В"
	words[41] = "А"
	words[42] = "П"
	words[43] = "Р"
	words[44] = "О"
	words[45] = "Л"
	words[46] = "Д"
	words[47] = "Ж"
	words[48] = "Э"
	words[49] = "Я"
	words[50] = "Ч"
	words[51] = "С"
	words[52] = "М"
	words[53] = "И"
	words[54] = "Т"
	words[55] = "Ь"
	words[56] = "Б"
	words[57] = "Ю"
	words[58] = "Ё"
	return words
endsub
Вот это вообще меня убило, решил переписать инжект. To Yoko Выдай исходники, будем внедрять все "важные" функции внутрь
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Function not found + полезности

Post by Mirage »

ИМХО если выкинуть исходники то погибнет то немногое что еще хоть как то шевелится. Шарды с онлайном >300 можно пересчитать по пальцам. В основной масса от 2 (админ-игрок) до 30. А если все про инжект будет доступно всем то будет читинг и коррупция... Хотя это мое мнение.

PS давно бы уже надо было выложить сурсы последнего инжекта - году в 2008 новый улучшенный инжект был бы готов.
Post Reply