Jump to content

Recommended Posts

Posted
18 minutes ago, MasterToma said:

Ok, now it works

Fix of the select with one case in master.

 

18 minutes ago, MasterToma said:

1. (4*(talker.param2 % 10))

Modulo precedence fix in master.

 

19 minutes ago, MasterToma said:

2. ((Rand(3)+1)*4)

This only will be problem if multiplication in NASC compiler has the same precedence as addition.

 

18 minutes ago, MasterToma said:

if (a && c || d)

This only will be problem if OR has the same precedence as AND.

Posted (edited)
12 minutes ago, verbrannt said:

This only will be problem if multiplication in NASC compiler has the same precedence as addition.

This only will be problem if OR has the same precedence as AND.

I understand it. But some of cases might like like with modulo.

 

I wouldn't noticed difference in if (a && c || d) if NASC would generated same code.

 

Could you please also add bracers for all nested expressions?

 

According to leaked code, all nested expressions have (). I'm not sure about such thing as precedence in script-engine, I could show you their VM code, where arguments only taken from stack in such and order in which compiler pasted them.

 

And NASC pasted them in opposite order :) (as I wrote in recent post)

Edited by MasterToma
Posted (edited)
12 minutes ago, MasterToma said:

I understand it. But some of cases might like like with modulo.

With modulo was different case. Modulo has same precedence as multiplication and division.

 

12 minutes ago, MasterToma said:

I wouldn't noticed difference in if (a && c || d) if NASC would generated same code.

I've tested it:


        1 && 2 || 3;
        (1 && 2) || 3;

        1 || 2 && 3;
        1 || (2 && 3);
        1 && (2 || 3);

         (1 || 2) && 3;

 

First two lines compiles in absolutely identical stack machine code. Also line 3 == line 4.
 

12 minutes ago, MasterToma said:

According to leaked code, all nested expressions have ()

It's because the decompiler, that was used to produce that leaked code, has no checks of operator precedence. It just adds braces everywhere after each operands pop from stack.

Edited by verbrannt
Posted (edited)

I never used shitty NASC decompilers :D No, Scripts from C0 were leaked. Real one with comments, etc. You should know it.

 

Okay, I will find good example, where OBJ code differs. Or if you don't want to hear about bugs, just say it clearly ;) I'm comparing two obj's with diff, so code differs... And Im trying to find good example, like with modulo

Edited by MasterToma
Posted
6 minutes ago, MasterToma said:

Or if you don't want to hear about bugs, just say it clearly ;)

Idk what you're talking about :) I've fixed every bug from your feedback, even not bugs (like increment/decrement & select with one case).
When you'll find another different obj code of course if will fix that.

Posted (edited)

Okay then... so as I told, nested bracers change resulted ai.obj

 

Try this one (output https://pastebin.com/6Su1S470)

	EventHandler TALK_SELECTED(talker) 
	{
		if ( HaveMemo(talker, @trial_of_scholar)==1 &&    
OwnItemCount(talker, @dieters_diary) >= 1 || OwnItemCount(talker, @scripture_chapter_1) >= 1 || OwnItemCount(talker, @strong_liquor) >= 1) 
		{
			AddChoice(0,"Mention what Raut said");
		}
	}

and with additional bracers

	EventHandler TALK_SELECTED(talker) 
	{
		if ( HaveMemo(talker, @trial_of_scholar)==1 &&    
(OwnItemCount(talker, @dieters_diary) >= 1 || OwnItemCount(talker, @scripture_chapter_1) >= 1 || OwnItemCount(talker, @strong_liquor) >= 1)) 
		{
			AddChoice(0,"Mention what Raut said");
		}
	}

https://pastebin.com/JL3sWgyz (output)

 

Scroll to the end in pastebin, to see the difference

 

The same in complex cases with + and *

 

Take into account, that NASC is actually simple stream translator, so it doesn't have (almost) context like AST. It translates line by line (with special handling of loops and if/else)

Edited by MasterToma
Posted (edited)
17 minutes ago, MasterToma said:

so as I told, nested bracers change resulted ai.obj

 

Yes, of course. I know this.

I've tried compile-decompile-recompile this code

class guard_babenco {
handler:
    EventHandler TALK_SELECTED(talker) {
        if (1 && 2 || 3 || 4) {
            Say("Hello");
        }

        if (1 && (2 || 3 || 4)) {
            Say("Hello");
        }
    }
}

And nothing changed. I've got same obj file as before decompilation.

But if you have any unfixed example of broken nesting of logical operators, provide an obj.

 

Of course if in OBJ we have something like 1 && (2 || 3 || 4) but after decompilation got 1 && 2 || 3 || 4 - it's a bug, and I need example.

But if we have (1 && 2) || 3 || 4 in OBJ and after decompilation got 1 && 2 || 3 || 4 - it's not a bug.

Edited by verbrannt
Posted (edited)
Quote

But if you have any unfixed example of broken nesting of logical operators, provide an obj.

I sent you ai.obj from C1. Being decompiled (bracers are missed) and compiled back, ai.obj with mixed and/or is produced. I pasted in my recent posts.

 

I have about 35 classes with such case. You can check drunkard_treaf for instance

Edited by MasterToma
Posted (edited)
1 hour ago, MasterToma said:

You can check drunkard_treaf for instance

Ok here I see difference. Looks like not logical operators bug, but IF statement bug. Also if c1 ai.obj was compiled with another compiler than you have, this differences can occur. Anyway original OBJ and recompiled OBJ produces same decompiled code.

Do you have leaked (original) source of this class?

 

UPD original code that produces identical to your ai.obj result:
 

(HaveMemo(talker, @trial_of_scholar) == 1 && (OwnItemCount(talker, @dieters_diary) >= 1 && OwnItemCount(talker, @scripture_chapter_1) >= 1 && OwnItemCount(talker, @strong_liquor) >= 1))


So there's useless braces in the original ai.obj.

 

Edited by verbrannt
Posted (edited)

Looks like we lost and talking about different things. I really understand, that if there are only &&, no point in extra bracers... belive me, because I've decompiled most of L2, and it works (including NASC itself). But this info about extra scope () is present in ai.obj. I posted examples, where you can see the difference. I posted the difference in pastebin. NASC generates DIFFERENT code for (a && (b && c)) and for (a && b && c). But decompiler restores them in SAME way - no bracers. I don't know how to be more clear. 

 

I have two concerns about it. First - messed diff. I can't compare original and recompiled objs due to much more trash. Second - there is might be some weird context, which might lead to bug.

 

OK, never-mind, you did great job anyway.

 

I have at least two more bugs apart this:

1. some jump is just missed. Have no idea, but in original class's obj there is just 1 more jump instruction. I can't say nothing concrete, because diff produces too much mismatches due to my previous point. Could you just add those bracers? Or point me the function and I'll fix it by my own maybe :)

 

2. in some classes (e.g. pet_manager_martin)

	push_event	//  i5
	push_const 212
	add

instead of

push_reg_sp
fetch_i

 

Edited by MasterToma
Posted

Original OBJ + Decompiled source + Recompiled OBJ: https://mega.nz/#!SSJ0FQ7L!EPXTDOTcGmy4QGJPIgZ7jMY7-AVQ9pcq_xfEHilwJzQ

Almost no differences. Only missed jump, as you mentioned.

Replaces made on both OBJs:
L\d+ -> L0
S\d+ -> L0
\r\nL0\r\n -> \r\n

Hope you would like the "((((((((((((((((((((((((((((((((((((((((" in decompiled source :D.

Posted (edited)

Well I think it's not so hard to do proper (), if this info present in ai.obj. But I understand your sarcasm.

Why should I replace labels If I ignore them during diff?

 

I have 35 files with differences (labels are ignored, and few more filters are ignored), but you don't want to hear :) And it's not "only jump" Okay I will fix it manually, not a big deal.

 

Tnx for your work, this decompiler at least somehow usefull

Edited by MasterToma
Posted (edited)
47 minutes ago, MasterToma said:

And it's not "only jump"

I've shared compiled OBJs right before your post. There's only 19 differences, and all is missing jump.

Those missing jumps might be a breaks inside if inside select. I have an old issue for it.
Idk, may be we're using different decompilers or something :)

Anyway, smiles mode now enabled by default in branch c1-support.
And you have only 35 files of 2200, I think it's not so bad.

Edited by verbrannt

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • looking for someone who has cache cleaner for h5 
    • I’m looking to buy GeoEngine compatible with L2Scripts (Essence). A test server must be provided so I can verify functionality before purchase. DM here or through Telegram: @nick77737
    • fixed !.. thank you veru much @NevesOma  someone lock it
    • OFFICIAL DEVELOPERS Undetected since : Release Updated for last patch : 29/11/2025 After payment you will receive: Product download link1 Activation key for the selected period. Free support for the duration of the product subscription.   ✅AC - Undetected ▸WINDOWS 10/11 (All versions, even 24H2) ▸INTEL / AMD ▸Our software mainly targets player wanting to cheat legitimately. . Precision. Stealth. Performance.   The external ARC Raiders cheats from stern designed to elevate your gameplay without slowing your system. Fully compatible with Windows 10/11 — Intel & AMD ready.   Our Functions: AIMBOT **Enable Aim requires a mandatory confirmation popup, so there’s zero risk of activating it by accident for users who don’t want to use it. Aimbot Aimbot Drone Fov Aim (Draw fov circle) Target Line (Draw targetline) Arrow Fov (Draw arrow fov) Visible Check (Aim visible) Humanize (Aim randomize) Custom Aim Key Fov Value / Smooth Value / Aim Delay Arrow Size & Spacing VISUALS – PLAYERS Box ESP (2D / Corner) Health / Shield Bar Skeleton ESP Distance ESP Name ESP Tracers / Player Lines Visible & Invisible Check Squad Name ESP Draw Eyes Directions Radar ESP Radar Distance ESP Players Flags (corpse/knocked/exit/alive) VISUALS – ENTITY Pickup Base ESP Drone ESP Probe Crashed ESP Apricot ESP Mullein ESP Agave ESP MossRock ESP Crate ESP Salvage Container ESP Rsr Lockers ESP Raiders Cache Esp Bin Trash Esp Shredder Esp Fruit Basket ESP Ammo Box ESP Computer ESP Backpack ESP Leaper ESP Probe ESP Mushroom ESP Cargo Ship ESP Firewall ESP Assault Rifle ESP Battle Rifle ESP SMG ESP Grenade ESP Medical Bag ESP Turret ESP Sentinel Esp Weapon Case Esp Extraction ESP All Weapons ESP Max Distance & Fade distance MISC FOV Arrow Player Count Display Custom Arrow Size & Distance Streamproof (Invisible in recordings & screenshots) External (No injection) Maximum Privacy & Security 24/7 Support Available: replies within minutes Our prices: Prices must be checked directly on our website, as they may change at any time to control sales — however, we remain among the most competitive in the market.   Discover our website   GET GOOD, GET STERN
    • I paid this guy yesterday (i got screen for the payment for proof), he told me that someone will log to send me my adena. Then he said he had some problems and couldn't send me the adena. Waited and waited and waited until he replied that he can't find the guy and he will return the money i gave him. Today still no money returned and he doesn't reply to the discord messages. If he doesn't return the money i paid or send the adena he promised in game, i will report him in every single website and many more. Stay away. I have all the discussion screenshot on discord with him. He knows who i am so he better keep his promise legit.
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock