| 
		
	
	
	
		
	Сообщений: 144 
	Тем: 9 
	Зарегистрирован: Jul 2012
	
 Репутация: 
2,152 
	
	
		Phantom-Dev Написал:Посоветуйте декомпилятор/компилятор AI.OBJ на нынешнее время для GF. Все перерыл. А то хочу скрипты под епилог подпилить) 
С декомпилом можем помочь, обратный компилятор пока не писали.
	 
	
	
	
		
	Сообщений: 243 
	Тем: 15 
	Зарегистрирован: Oct 2011
	
 Репутация: 
887 
	
	
		Camelion Написал:С декомпилом можем помочь, обратный компилятор пока не писали. 
Спасибо за ответ. Буду хотя бы в курсе.  
А по поводу декомпилятора можно подробней. Как говорится первый шаг к компиляции это исходный код на руках))
	 
	
	
	
		
	Сообщений: 144 
	Тем: 9 
	Зарегистрирован: Jul 2012
	
 Репутация: 
2,152 
	
	
		примерно с год назад делали декомпилятор ai.obj в человеко-читаемый код. Последняя версия умеет в скалу декомпилить. Думаю подкрутить под nasc формат не составит труда, если это принципиально.
	 
	
	
	
		
	Сообщений: 243 
	Тем: 15 
	Зарегистрирован: Oct 2011
	
 Репутация: 
887 
	
	
		Camelion Написал:примерно с год назад делали декомпилятор ai.obj в человеко-читаемый код. Последняя версия умеет в скалу декомпилить. Думаю подкрутить под nasc формат не составит труда, если это принципиально. 
А где найти это чудо что б подкрутить? Да скучно, хотел на основе птс сделать гибрид)) Вот и хотел с декомпиляцией разобраться.  
Если направите буду благодарен.
	 
	
	
	
		
	Сообщений: 144 
	Тем: 9 
	Зарегистрирован: Jul 2012
	
 Репутация: 
2,152 
	
	
		В опенсорс не выкладывали.  
Есть следующее предложение: если наберется минимум 10 человек которым реально нужен такой софт - я выдерну его из наших исходов as-is и положу на гитхаб с условием, что все доработки будут PR'ами сыпаться туда-же. Выглядит достаточно честно. 
Рассчитаемся следующим образом - оставляем коммент:  
+1, %nickname%, %для чего он вам нужен%. 
Например:
 +1, Phantom-Dev, хотел сделать гибрид на основе птс.
осталось 9 чел.    
	
	
	
		
	Сообщений: 2,454 
	Тем: 53 
	Зарегистрирован: Apr 2010
	
 Репутация: 
19,728 
	
	
		Camelion, покрутил/посмотрел бы декомпилер, так сказать, для собственного образования.
	 
m0nster.art - clear client patches, linkz to utils & code. 
Гадаю по капче.
 
	
	
	
		
	Сообщений: 666 
	Тем: 15 
	Зарегистрирован: Aug 2014
	
 Репутация: 
1,790 
	
	
		+1, Influence, была идея сделать полный интерпретатор AI.obj.
	 
	
	
	
		
	Сообщений: 134 
	Тем: 18 
	Зарегистрирован: Aug 2015
	
 Репутация: 
156 
	
	
		В шаре скриптов HF был декомпилятор написанный на яве (кстати и исходы его зашарены в интернете, но можно и декомпильнуть, если захотите доработать). По мне так это самый адвекватный декомпилятор из всех (он работает на основе комментариев в ai.obj)
	 
	
	
	
		
	Сообщений: 897 
	Тем: 30 
	Зарегистрирован: Feb 2012
	
 Репутация: 
8,447 
	
	
		Camelion Написал:примерно с год назад делали декомпилятор ai.obj в человеко-читаемый код. Последняя версия умеет в скалу декомпилить. Думаю подкрутить под nasc формат не составит труда, если это принципиально. 
Можно какой-нибудь экземпл глянуть? 
Например, warrior.
	 
	
	
	
		
	Сообщений: 144 
	Тем: 9 
	Зарегистрирован: Jul 2012
	
 Репутация: 
2,152 
	
	
		moveton Написал:Можно какой-нибудь экземпл глянуть?Например, warrior.
 
Отчего же нельзя. warrior'а нету под рукой, последнее что тестил вот:
 
			goblin PHP код: <?php package pts_scripts.npc
 
 import ru.jts.decompiler.model._
 
 class goblin extends warrior_passive {
 override def MY_DYING(last_attacker: Creature = null, attacker: Creature = null, target: Creature = null, talker: Creature = null, creature: Creature = null, reply: Int = 0, skill_name_id: Int = 0, `private`: Creature = null, code_info: CodeInfo = null, random1_list: CodeInfoList = null, always_list: CodeInfoList = null, npc0: Npc = null, pos0: Point = null, maker0: NpcMaker = null, maker1: NpcMaker = null, lparty: Party = null, party0: Party = null, pledge0: Clan = null, h0: HateInfo = null, c0: Creature = null, c1: Creature = null, c2: Creature = null, c3: Creature = null, s0: String = null, s1: String = null, f0: Double = 0.0, f1: Double = 0.0, f2: Double = 0.0, f3: Double = 0.0, i0: Int = 0, i1: Int = 0, i2: Int = 0, i3: Int = 0, i4: Int = 0, i5: Int = 0, i9: Int = 0) {
 var _i0 = i0
 var _c1 = c1
 var _random1_list = random1_list
 var _always_list = always_list
 var _code_info = code_info
 var _target = target
 
 _always_list = gg.AllocCodeInfoList()
 _random1_list = gg.AllocCodeInfoList()
 _target = last_attacker
 _always_list.SetInfo(0, _target)
 while (!gg.IsNull(_code_info = _always_list.Next())) {
 _code_info.code match {
 case 0 => {
 myself.SetCurrentQuestID(264)
 _target = _code_info.RandomSelectOne()
 if (!gg.IsNull(_target) && myself.DistFromMe(_target) <= 1500) {
 _c1 = myself.GetLastAttacker()
 if (_c1.master != null) {
 _c1 = _c1.master
 }
 if (gg.OwnItemCount(_c1, 1367) < 50 && gg.HaveMemo(_c1, 264) > 0) {
 _i0 = gg.Rand(20)
 if (_i0 < 5) {
 if (gg.OwnItemCount(_c1, 1367) >= 49) {
 myself.GiveItem1(_c1, 1367, 1)
 myself.SetFlagJournal(_c1, 264, 2)
 myself.ShowQuestMark(_c1, 264)
 myself.SoundEffect(_c1, "ItemSound.quest_middle")
 }
 else if (gg.OwnItemCount(_c1, 1367) == 48) {
 myself.GiveItem1(_c1, 1367, 2)
 myself.SetFlagJournal(_c1, 264, 2)
 myself.ShowQuestMark(_c1, 264)
 myself.SoundEffect(_c1, "ItemSound.quest_middle")
 }
 else {
 myself.GiveItem1(_c1, 1367, 2)
 myself.SoundEffect(_c1, "ItemSound.quest_itemget")
 }
 }
 else if (_i0 < 10) {
 if (gg.OwnItemCount(_c1, 1367) == 46) {
 myself.GiveItem1(_c1, 1367, 4)
 myself.SetFlagJournal(_c1, 264, 2)
 myself.ShowQuestMark(_c1, 264)
 myself.SoundEffect(_c1, "ItemSound.quest_middle")
 }
 else if (gg.OwnItemCount(_c1, 1367) == 47) {
 myself.GiveItem1(_c1, 1367, 3)
 myself.SetFlagJournal(_c1, 264, 2)
 myself.ShowQuestMark(_c1, 264)
 myself.SoundEffect(_c1, "ItemSound.quest_middle")
 }
 else if (gg.OwnItemCount(_c1, 1367) == 48) {
 myself.GiveItem1(_c1, 1367, 2)
 myself.SetFlagJournal(_c1, 264, 2)
 myself.ShowQuestMark(_c1, 264)
 myself.SoundEffect(_c1, "ItemSound.quest_middle")
 }
 else if (gg.OwnItemCount(_c1, 1367) == 49) {
 myself.GiveItem1(_c1, 1367, 1)
 myself.SetFlagJournal(_c1, 264, 2)
 myself.ShowQuestMark(_c1, 264)
 myself.SoundEffect(_c1, "ItemSound.quest_middle")
 }
 else {
 myself.GiveItem1(_c1, 1367, 8)
 myself.SoundEffect(_c1, "ItemSound.quest_itemget")
 }
 }
 }
 }
 }
 }
 }
 _code_info = _random1_list.RandomSelectOne()
 if (!gg.IsNull(_code_info)) {
 //_code_info.code
 }
 super.MY_DYING(last_attacker, attacker, target, talker, creature, reply, skill_name_id, `private`, code_info, random1_list, always_list, npc0, pos0, maker0, maker1, lparty, party0, pledge0, h0, c0, c1, c2, c3, s0, s1, f0, f1, f2, f3, i0, i1, i2, i3, i4, i5, i9)
 
 }
 }
 
 |