eressea Posted January 18, 2017 Share Posted January 18, 2017 Hi everyone, thanks to Sauron, I was able to decompile and manually fix the whole Gracia Final AI. All sources can be compiled with MyExt64 compiler and the output seems completely right :) If you find any bug/error, please let me know. Download here http://download.l2shrine.com/ai.tar.bz2 1 1 Quote Link to comment Share on other sites More sharing options...
Pulentolento Posted January 18, 2017 Share Posted January 18, 2017 (edited) Awesome Emca!!! Great Work!!! Thx for share ;D Edited January 18, 2017 by Pulentolento Quote Link to comment Share on other sites More sharing options...
Szakalaka Posted January 18, 2017 Share Posted January 18, 2017 I cant believe server side is made using some script language. This cant be real! Quote Link to comment Share on other sites More sharing options...
zconll Posted January 22, 2017 Share Posted January 22, 2017 goog work eressea, could you share your complete ai.obj compiled from script folder? from leaked pack is different i need to know which class were add by rgb-club for work with clean ai. Quote Link to comment Share on other sites More sharing options...
eressea Posted January 23, 2017 Author Share Posted January 23, 2017 goog work eressea, could you share your complete ai.obj compiled from script folder? from leaked pack is different i need to know which class were add by rgb-club for work with clean ai. Here you go http://download.l2shrine.com/ai.obj.bz2 Quote Link to comment Share on other sites More sharing options...
zconll Posted January 23, 2017 Share Posted January 23, 2017 Thanks you . Quote Link to comment Share on other sites More sharing options...
Erinia Posted January 26, 2017 Share Posted January 26, 2017 looking for it :) tks for share Quote Link to comment Share on other sites More sharing options...
webdes27 Posted February 15, 2017 Share Posted February 15, 2017 (edited) How to build it? Edited February 15, 2017 by webdes27 Quote Link to comment Share on other sites More sharing options...
eressea Posted February 15, 2017 Author Share Posted February 15, 2017 How to build it? You can either compile just one NASC file (but you'll have to add stubs for all base classes - you need just class definition + parameters used in subclasses) or you can join the whole thing into single NASC file and compile whole AI at the time: #!/usr/bin/env python # join NASC AI files to single NASC file from os import walk, getcwd from codecs import open cwd = getcwd() cwd = u"\\\\?\\%s" % (cwd, ) fw = open("ai.nasc", "w", "utf-16le") for path, dirs, files in walk("%s\\ai-src" % (cwd, )): for file in files: print file fw.write(open("%s\\%s" % (path, file, ), "r", "utf-8").read()) fw.close() Quote Link to comment Share on other sites More sharing options...
webdes27 Posted February 15, 2017 Share Posted February 15, 2017 Build here this compiler? http://download.l2shrine.com/compiler.zip Thank you for your help and for the files! Quote Link to comment Share on other sites More sharing options...
eressea Posted February 16, 2017 Author Share Posted February 16, 2017 Build here this compiler? http://download.l2shrine.com/compiler.zip Yes (or you can buy compiler from AdvExt team for $100 :troll:) Quote Link to comment Share on other sites More sharing options...
clinique Posted March 18, 2017 Share Posted March 18, 2017 Yes (or you can buy compiler from AdvExt team for $100 :troll:) :troll:) Quote Link to comment Share on other sites More sharing options...
webdes27 Posted December 13, 2017 Share Posted December 13, 2017 (edited) please help deompiled code: Spoiler class 1 sia_premium : citizen parameter_define_begin int nMoneyId1 4037 int nAmount1 150 int nDuration1 604800 float nAdenaRate1 1.500000 float nItemRate1 1.500000 float nSpoilRate1 1.500000 float nExpRate1 1.500000 float nSpRate1 1.500000 int nMoneyId2 4037 int nAmount2 250 int nDuration2 1296000 float nAdenaRate2 1.500000 float nItemRate2 1.500000 float nSpoilRate2 1.500000 float nExpRate2 1.500000 float nSpRate2 1.500000 int nMoneyId3 4037 int nAmount3 450 int nDuration3 2592000 float nAdenaRate3 1.500000 float nItemRate3 1.500000 float nSpoilRate3 1.500000 float nExpRate3 1.500000 float nSpRate3 1.500000 string fnOk "gmshop_premium_activated.htm" string fnError "gmshop_premium_error.htm" string fnAll "gmshop_premium_already.htm" parameter_define_end handler 32 349 // MENU_SELECTED variable_begin "talker" "ask" "reply" "myself" "_choiceN" "_code" "_from_choice" variable_end push_event push_const 160 add fetch_i4 push_const 360 equal branch_false L18 L0 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_const 0 func_call 184680556 shift_sp -2 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_const 1 func_call 184680556 shift_sp -2 push_const 0.800000 mul greater_equal push_reg_sp fetch_i branch_true L1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_const 2 func_call 184680556 shift_sp -2 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_const 3 func_call 184680556 shift_sp -2 push_const 0.800000 mul greater_equal or L1 branch_false L3 L2 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_const 1118 func_call 184680517 shift_sp -2 shift_sp -1 exit_handler L3 push_event push_const 40 add fetch_i push_const 144 add fetch_i4 push_const 0 equal branch_false L16 L4 push_event push_const 164 add fetch_i4 push_const 1 equal branch_false L8 L5 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nMoneyId1 func_call 184680579 shift_sp -2 push_parameter nAmount1 greater_equal branch_false L7 L6 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nMoneyId1 push_parameter nAmount1 func_call 184746114 shift_sp -3 shift_sp -1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nAdenaRate1 push_parameter nItemRate1 push_parameter nSpoilRate1 push_parameter nExpRate1 push_parameter nSpRate1 push_parameter nDuration1 func_call 185008561 shift_sp -7 shift_sp -1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnOk func_call 184680516 shift_sp -2 shift_sp -1 jump L17 L7 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnError func_call 184680516 shift_sp -2 shift_sp -1 jump L17 L8 push_event push_const 164 add fetch_i4 push_const 2 equal branch_false L12 L9 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nMoneyId2 func_call 184680579 shift_sp -2 push_parameter nAmount2 greater_equal branch_false L11 L10 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nMoneyId2 push_parameter nAmount2 func_call 184746114 shift_sp -3 shift_sp -1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nAdenaRate2 push_parameter nItemRate2 push_parameter nSpoilRate2 push_parameter nExpRate2 push_parameter nSpRate2 push_parameter nDuration2 func_call 185008561 shift_sp -7 shift_sp -1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnOk func_call 184680516 shift_sp -2 shift_sp -1 jump L17 L11 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnError func_call 184680516 shift_sp -2 shift_sp -1 jump L17 L12 push_event push_const 164 add fetch_i4 push_const 3 equal branch_false L17 L13 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nMoneyId3 func_call 184680579 shift_sp -2 push_parameter nAmount3 greater_equal branch_false L15 L14 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nMoneyId3 push_parameter nAmount3 func_call 184746114 shift_sp -3 shift_sp -1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter nAdenaRate3 push_parameter nItemRate3 push_parameter nSpoilRate3 push_parameter nExpRate3 push_parameter nSpRate3 push_parameter nDuration3 func_call 185008561 shift_sp -7 shift_sp -1 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnOk func_call 184680516 shift_sp -2 shift_sp -1 jump L17 L15 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnError func_call 184680516 shift_sp -2 shift_sp -1 jump L17 L16 push_event push_const 704 add fetch_i push_event push_const 40 add fetch_i push_parameter fnAll func_call 184680516 shift_sp -2 shift_sp -1 L17 exit_handler L18 call_super handler_end class_end Edited December 13, 2017 by webdes27 Quote Link to comment Share on other sites More sharing options...
eressea Posted December 14, 2017 Author Share Posted December 14, 2017 Probably something like this but I can't figure out what variable is 144 on talker (CSharedCreatureData + 0x90) - you'll have to find it in your extender (it doesn't seem to be in C4 l2npc.exe): set_compiler_opt base_event_type(@NTYPE_NPC_EVENT) class sia_premium : citizen { parameter: int nMoneyId1 = 4037; int nAmount1 = 150; int nDuration1 = 604800; float nAdenaRate1 = 1.500000; float nItemRate1 = 1.500000; float nSpoilRate1 = 1.500000; float nExpRate1 = 1.500000; float nSpRate1 = 1.500000; int nMoneyId2 = 4037; int nAmount2 = 250; int nDuration2 = 1296000; float nAdenaRate2 = 1.500000; float nItemRate2 = 1.500000; float nSpoilRate2 = 1.500000; float nExpRate2 = 1.500000; float nSpRate2 = 1.500000; int nMoneyId3 = 4037; int nAmount3 = 450; int nDuration3 = 2592000; float nAdenaRate3 = 1.500000; float nItemRate3 = 1.500000; float nSpoilRate3 = 1.500000; float nExpRate3 = 1.500000; float nSpRate3 = 1.500000; string fnOk = "gmshop_premium_activated.htm"; string fnError = "gmshop_premium_error.htm"; string fnAll = "gmshop_premium_already.htm"; handler: EventHandler MENU_SELECTED(talker, ask, reply) { if (ask == 360) { if (GetInventoryInfo(talker, 0) >= GetInventoryInfo(talker, 1) * 0.8 || GetInventoryInfo(talker, 2) >= GetInventoryInfo(talker, 3) * 0.8) { ShowSystemMessage(talker, 1118); return; } if (talker.unknown144 == 0) { // COULDN'T FIND OUT WHAT IS THIS - It's INT32 on CSharedCreatureData+0x90 if (reply == 1) { if (OwnItemCount(talker, nMoneyId1) >= nAmount1) { DeleteItem1(talker, nMoneyId1, nAmount1) ChangeDynamicRates(talker, nAdenaRate1, nItemRate1, nSpoilRate1, nExpRate1, nSpRate1, nDuration1); ShowPage(talker, fnOk); return; } else { ShowPage(talker, fnError); return; } } else if (reply == 2) { if (OwnItemCount(talker, nMoneyId2) >= nAmount2) { DeleteItem1(talker, nMoneyId2, nAmount2) ChangeDynamicRates(talker, nAdenaRate2, nItemRate2, nSpoilRate2, nExpRate2, nSpRate2, nDuration2); ShowPage(talker, fnOk); return; } else { ShowPage(talker, fnError); return; } } else if (reply == 3) { if (OwnItemCount(talker, nMoneyId3) >= nAmount3) { DeleteItem1(talker, nMoneyId3, nAmount3) ChangeDynamicRates(talker, nAdenaRate3, nItemRate3, nSpoilRate3, nExpRate3, nSpRate3, nDuration3); ShowPage(talker, fnOk); return; } else { ShowPage(talker, fnError); return; } } } else { ShowPage(talker, fnAll); } return; } super(); } } Quote Link to comment Share on other sites More sharing options...
Pulentolento Posted December 14, 2017 Share Posted December 14, 2017 This nasc code looks like from AdvExt. I do not know which extender you are working on, but looks like the "unknown144" is: int CNPC::IsUserVip(CSharedCreatureData *c); so try to replace like this: if (talker.IsUserVip == 0) cheers Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.