Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
 
 
Опции темы Опции просмотра
Старый 16.06.2010, 22:58   #38
Новичок
 
Регистрация: 16.06.2010
Сообщений: 4
Сказал Спасибо: 2
Имеет 1 спасибку в 1 сообщении
lam пока неопределено
По умолчанию

Спасибо! если кому интересно, на Lua это будет выглядеть так:
Код:
	function _init_tables(seed, _2byte_size)

		local i = 0
		local x = 0
		local rand_pos = 0
		local cur_pos = 0


		local _1_byte_table = ''
		local _2_byte_table = ''

		local _2_byte_table_size = _2byte_size

		for i = 0, 0xD0, 1 do
			_1_byte_table = _1_byte_table..string.char(i)
		end
		for i = 0, _2byte_size, 1 do
			_2_byte_table = _2_byte_table..string.char(i,0)
		end

		math.randomseed(seed)

		for i = 2, 0xD1 do

			rand_pos = (math.random(0, 0x7FFF) % i) + 1
			x = GInt(_1_byte_table, rand_pos, 1)
			_1_byte_table = PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1)
			_1_byte_table = PInt(_1_byte_table, x, i, 1)

		end

		cur_pos = 3
		for i = 2, _2byte_size+1 do

			rand_pos = (math.random(0, 0x7FFF) % i)
			x = GInt(_2_byte_table, rand_pos * 2 + 1, 2)
			_2_byte_table = PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2)
			_2_byte_table = PInt(_2_byte_table, x, cur_pos, 2)
			cur_pos = cur_pos + 2

		end

		local idx = _1_byte_table:find(string.char(0x12))
		if idx == nil then
			idx = 0
		end

		cur_pos = idx
		x = GInt(_1_byte_table, 0x13, 1)
		_1_byte_table = PInt(_1_byte_table, 0x12, 0x13, 1)
		_1_byte_table = PInt(_1_byte_table, x, cur_pos, 1)

		local idx = _1_byte_table:find(string.char(0xB1))
		if idx == nil then
			idx = 0
		end

		cur_pos = idx
		x = GInt(_1_byte_table, 0xB2, 1)
		_1_byte_table = PInt(_1_byte_table, 0xB1, 0xB2, 1)
		_1_byte_table = PInt(_1_byte_table, x, cur_pos, 1)

	end
где GInt и PInt нагло содрано из WP саурона, остальное стандартные либы.
можно и красивей конечно, но я туповат и ленив)

p.s. При использовании сишной rand (в Lua это math.rand)
складывать 0x80000000 с сами_знаете_чем не надо
(помоему это свзяано с тем, что сишная не использует int64
при генерировании рнд.числа)

p.p.s. _2byte_size передавать побольше чем 0x58 (так по скрипту)
т.к. в Т2.3 этих(0xD0 aka Ex) пакетов прибавилось... пруфлинк -
_ttp://www.l2jserver.com/svn/branches/L2_GameServer_T2.3/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java

Последний раз редактировалось lam, 17.06.2010 в 12:33.
lam вне форума   Ответить с цитированием
 

  CoderX :: Forums > Основные форумы > Программинг


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:37.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!