It shouldn't be possible to dupe items in TP or housing or by trade

I don’t understand the underlying architecture here. Why isn’t there a double-entry accounting system to say the least. How can the TP, or a house, or player trade, create an item? The item creation process should be completely 100% separate. The TP, house, etc. seem to be simple buckets that at any time can create items from nothing out of thin air simply by believing they contain another item. I don’t understand how that is possible. Can someone explain? Amazon?

2 Likes

cause its a series of create game object and destroy game object every time an object is transferred

There’s a very simplified answer here. Spaghetti code. Get rid of your original devs in place of cheaper ones who have to figure out the mess of code themselves then everything they do they end up breaking something else.

2 Likes

Its like this for all game engines from what i have seen, be it Unity, Unreal, Cry or even god forbid lumberyard.
But in saying that, it all comes down to the coding and cross references…

I know you’re joking about spaghetti coding, but… it legit looks like they’re using node based coding with how bad this game has been coded.

1 Like

My guess is that item transactions in this game are not atomic so it is possible to lose track of changes made but not yet committed. Basic stuff.

That’s not a joke they likely have a very messy and unorganized code that when they replaced their devs the new programmers have trouble figuring out existing code due to how jumbled it is. This would explain why everytime they do one thing, they break another. It’s definitely spaghetti code.

1 Like

ahh i see.

When i hear spaghetti coding, i instantly think node based coding as it look like strands of spaghetti.
i.e:

But thats my bad for always having called node based coding spaghetti. Not how everyone else uses the term. i was being narrow minded and i apologize.

Now i get what you mean, i totally agree and sadly it probably would be better if their CURRENT team used node based as there would be less ways for them to break it.
With that said, can they just hire people who know what they are doing and use correct naming conventions while writing scripts and leave comments on their code so people know what function it serves.
/* insert what this part of the code is meant to do and what function it is calling. Also use correct naming conventions so others know what it is at a glance. */

1 Like

Like OMG . . . thanks for the solution.

Damn . . . without your wisdom, the solution to duping in every video game would not be solved. /end sarcasm

People will always find ways to cheat. I guess all locks are pick proof. I guess all banks have not been broken into. I can go on and on.

Amazingly i have only seen one lock in my travels that hasn’t be picked. Not to say it can’t be done, just saying how good that lock is.
Bowley locks FTW!!!
Pretty sure someone will have picked it before but if AGS was as good as Bowley locks, i would pay a sub fee with no questions asked!

Where I live, the Abloy Classic is the standard for lowest security applications like for a garden shed or a fence gate. Too bad for kids interested of lockpicking sport.

Programmers have been talking about spaghetti code since at least IBM mainframe days in the 60s and 70s.

2 Likes

Hey man, like I said I am asking, someone explain this to me.

If it were this easy to get free stuff from Amazon’s web store or from a bank, they’d all be out of business.

1 Like

:slight_smile:

2 Likes

Without looking at their code, no one will be able to tell you. Everyone will be able to make a guess though. That is the issue.

The other issue is the assumption that this is unique to New World. This issue is not. It has happened in WoW. It has happened in lots of other games. People will always try to find a way. As an example, one of the dupes, which was figured out, required forcing bad packets and latency into the stream to create an issue. This is much deeper than just a double entry accounting system. And in all honesty, if it were easy, no games would have this issue.

This particular dupe (assuming I understand it right, I have not bothered to try it on PTR) is simple enough a player can do it accidentally while fiddling with their inventory. Basic keeping track of changes made but not committed should prevent that kind of dupe.

Aside, have they fixed the player having to manually apply fishing bait every cast, bait not consuming and sometimes duping? I’d suspect root cause of that was something quite similar as with this dupe. (I have not bothered with fishing since they broke it.)

Yeah, actual spaghetti code is something you would see in languages like BASIC or Assembler, where the main means if control is the GOTO statement and badly structured code would weave back and forth through itself like a bowl of spaghetti. Most of the people throwing the terms ‘spaghetti code’ around weren’t even born when actual spaghetti code was being written and just use the term to mean badly-structured or complicated code. Actually most of them don’t even really mean that, they just type “LOL spaghetti code” on forums because they’ve seen someone else do it and they think it makes them look cool.

As someone who actually works for a living on real-time transaction architectures (for a bank, in my case) I would just offer the thoughts that A) this shit is harder than you think and B) AGS clearly haven’t nailed it yet.

3 Likes

The original data architects weren’t good. They designed some distributed system that allows for duping of items. This is why they had to refactor housing already. I imagine this happened because they have a lot of smaller teams that worked on their features in isolation.

@Daayou I have never seen another game that suffered from this problem as bad as NW does. This is not some unsolvable problem that you make it out to be. Every time this happens a mistake was made on the engineering end. I think most people left playing have accepted this buggy and poorly written game for what it is.

Spaghetti code has nothing to do with language. It is a nick name for horribly written code that is intertwined and not isolated at all.