poltomb wrote:If there is a way to make an item visible to the client or not, then the bot is going to have the same information. If a bot is perfectly coded, then there is no technical way to determine if the player is botting or not (since it does exactly what the client does). Only the 'gut feeling' of a good GM staff can determine whether someone is botting or not. But that method is not without its flaws. There is only one 100% accurate method of determining if the player is botting or not, and that is to be physically next to the player's computer looking at his/her screen. My opinion is a bit pessimistic, but it is the truth. There are some good, practical ways to determine if a player is botting, but the main problem with those is that once they reach the public svn here at L2J, then the bot creators (l2walker, l2net) can see what is broken and fix it.
First of all i'm newbie in developing and especialy in bots, don't use/test them. So if the points made below are nonsence just please answer normaly. I want to learn.
Code: Select all
/** * Init a dropped L2ItemInstance and add it in the world as a visible object.<BR><BR> * * <B><U> Actions</U> :</B><BR><BR> * <li>Set the x,y,z position of the L2ItemInstance dropped and update its _worldregion </li> * <li>Add the L2ItemInstance dropped to _visibleObjects of its L2WorldRegion</li> * <li>Add the L2ItemInstance dropped in the world as a <B>visible</B> object</li><BR><BR> * * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T ADD the object to _allObjects of L2World </B></FONT><BR><BR> * * <B><U> Assert </U> :</B><BR><BR> * <li> _worldRegion == null <I>(L2Object is invisible at the beginning)</I></li><BR><BR> * * <B><U> Example of use </U> :</B><BR><BR> * <li> Drop item</li> * <li> Call Pet</li><BR> * */ public class ItemDropTask implements Runnable { private int _x,_y,_z; private final L2Character _dropper; private final L2ItemInstance _itm; public ItemDropTask(L2ItemInstance item, L2Character dropper, int x, int y, int z) { _x = x; _y = y; _z = z; _dropper = dropper; _itm = item; } public final void run() { assert _itm.getPosition().getWorldRegion() == null; if (Config.GEODATA > 0 && _dropper != null) { Location dropDest = GeoData.getInstance().moveCheck(_dropper.getX(), _dropper.getY(), _dropper.getZ(), _x, _y, _z, _dropper.getInstanceId()); _x = dropDest.getX(); _y = dropDest.getY(); _z = dropDest.getZ(); } if(_dropper != null) setInstanceId(_dropper.getInstanceId()); // Inherit instancezone when dropped in visible world else setInstanceId(0); // No dropper? Make it a global item... synchronized (_itm) { // Set the x,y,z position of the L2ItemInstance dropped and update its _worldregion _itm.setIsVisible(true); _itm.getPosition().setWorldPosition(_x, _y ,_z); _itm.getPosition().setWorldRegion(L2World.getInstance().getRegion(getPosition().getWorldPosition())); // Add the L2ItemInstance dropped to _visibleObjects of its L2WorldRegion } _itm.getPosition().getWorldRegion().addVisibleObject(_itm); _itm.setDropTime(System.currentTimeMillis()); _itm.setDropperObjectId(_dropper != null ? _dropper.getObjectId() : 0); //Set the dropper Id for the knownlist packets in sendInfo // this can synchronize on others instancies, so it's out of // synchronized, to avoid deadlocks // Add the L2ItemInstance dropped in the world as a visible object [color=#FF0000]L2World.getInstance().addVisibleObject(_itm, _itm.getPosition().getWorldRegion());[/color] if (Config.SAVE_DROPPED_ITEM) ItemsOnGroundManager.getInstance().save(_itm); _itm.setDropperObjectId(0); //Set the dropper Id back to 0 so it no longer shows the drop packet } }
Talking about this part. What happens if we comment that line? Bot should not notice this change despite he's flawlesly codded.