What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

Item rules (ingore 2h weapons etc) using Giles, darkfriend scoring

barbarian6

New Member
Joined
Nov 28, 2012
Messages
209
Reaction score
0
Does anybody know how to create rules to pickup only certain items and use Giles or Darkfriendss scoring system to it?

for instance:
- loot all rare ilvl 61+ weapons and ignore all 2h
- loot all 61lvl+ armor except for gloves (loot 58+ cause even 58lvl gloves can be worth bilions now)
- ignore all rare shields, mojos, sources

atm we have great item scoring systems (darkfriends and Giles), however we still swate huge ammount of time by simply picking up items that are 99,9% useless before id.

I know You can create such a rules by DB .xml, but then You can't use scoring system for stashing items mentioned above

any ideas?
 
darkfiend's:

[QUALITY] == Rare && [BASETYPE] == Weapon && [TWOHAND] == true # [1] == 1 # [TRASH]


put it on somewhere on start in rale.dis
 
You didn't get the point...I'm not talking about trashing or stashing, but about not picking up from the floor :)
 
find these lines on ItemHandling.cs

//case GBaseItemType.WeaponTwoHand:
case GBaseItemType.WeaponOneHand:
//case GBaseItemType.WeaponRange:

the // will make ignore picking up 2handers adn ranged weapons.
case GBaseItemType.Armor:
//case GBaseItemType.Offhand:

Got this also to not pickup offhands.
 
ok.. simular effect towards his question.. how to i make it not ID certian items? i.e rings/amu/legends?
 
I'm reposting this here because it is buried in an item rules thread, as an answer in case anyone has the same question.
This is an ugly hack, but it will work. Open up ItemHandling.cs in the Giles Community directory, and around line 67 make this:
Code:
case GBaseItemType.Armor:
case GBaseItemType.Offhand:
    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
look like this:
Code:
case GBaseItemType.Armor:
    if (itemType == GItemType.Gloves)
        return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
    else
        return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
case GBaseItemType.Offhand:
    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
It just substitutes 58 for whatever value you have it set to pick up rares. Then just adjust your rare pickup to 61 and go. The same concept can be applied to the weapons, change this:
Code:
case GBaseItemType.WeaponTwoHand:
case GBaseItemType.WeaponOneHand:
case GBaseItemType.WeaponRange:
    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);
to this:
Code:
case GBaseItemType.WeaponTwoHand:
    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 63);
case GBaseItemType.WeaponOneHand:
case GBaseItemType.WeaponRange:
    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);
and rare two handed weapons will only be picked up if they're 63, despite whatever you set the slider weapon pickup to. If you don't want to pick up a certain item type at all, fr0stebyte's solution above works perfectly.
 
First of all Rakurai,

You are my GOD!!! IT'S WORKING!!! YES!!!!!!!!

just final tunning.

If I would like to keep bracers same way as gloves and keep WeaponRange only ilvl 63 how would it look like?

so far I use it this way (ignore 2h completly, but it's picking up leg (checked on my Skorn) !! great)

Code:
case GBaseItemType.WeaponOneHand:
                case GBaseItemType.WeaponRange:
                    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);
                case GBaseItemType.Armor:
					if (itemType == GItemType.Gloves)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
					else
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);


i need to change it for something like this?

Code:
//case GBaseItemType.WeaponTwoHand:
                case GBaseItemType.WeaponOneHand:
                case GBaseItemType.WeaponRange:
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 63);
                case GBaseItemType.Armor:
					if (itemType == GItemType.Gloves)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
					if (itemType == GItemType.Bracer)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);	
					else
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
				//case GBaseItemType.Offhand:
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
 
Last edited:
First of all Rakurai,

You are my GOD!!! IT'S WORKING!!! YES!!!!!!!!

just final tunning.

If I would like to keep bracers same way as gloves and keep WeaponRange only ilvl 63 how would it look like?

so far I use it this way (ignore 2h completly, but it's picking up leg (checked on my Skorn) !! great)

Code:
case GBaseItemType.WeaponOneHand:
                case GBaseItemType.WeaponRange:
                    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);
                case GBaseItemType.Armor:
					if (itemType == GItemType.Gloves)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
					else
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);


i need to change it for something like this?

Code:
//case GBaseItemType.WeaponTwoHand:
                case GBaseItemType.WeaponOneHand:
                case GBaseItemType.WeaponRange:
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 63);
                case GBaseItemType.Armor:
					if (itemType == GItemType.Gloves)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
					if (itemType == GItemType.Bracer)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);	
					else
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
				//case GBaseItemType.Offhand:
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
On the last two lines, you commented out the case for offhand, but you left the return statement. Comment that out too:
Code:
//case GBaseItemType.Offhand:
//    return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
 
Yes thanks, figured it out by now, but something else must be broken cause it's ignoring all of the 1h weapon (sword, maces,axe etc)


ok i think i know now

need to put this
Code:
return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);

below weapononehand

just to sum up for noobs like me :)

that's how it should look like and it will ingore 2h weapons, off-hands, pickup only range weapons 63+, gloves 58+, bracers 58+ and rest will be in giles settings.

Code:
switch (baseType)
            {
                //case GBaseItemType.WeaponTwoHand:
                case GBaseItemType.WeaponOneHand:
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);
                case GBaseItemType.WeaponRange:
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 63);
                case GBaseItemType.Armor:
					if (itemType == GItemType.Gloves)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
					if (itemType == GItemType.Bracer)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);	
					else
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
				//case GBaseItemType.Offhand:
					//return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);

all credits go to Rakurai and fr0stebyte! big thanks !
 
Last edited:
Looks good! Don't be afraid to experiment, but be careful, it's addicting. I started tinkering with code for an online game about a dozen years ago, now I'm a comp sci senior.
 
Any clue what code i shall use to make him ignore picking up blue items at all ? Wasting my precious bagspace :P
 
I put some more codes so now You can adjust which ilvl for each weapon You want to pick up. Just change the numbers as You want them.
[it's working as intended]
Code:
                  //case GBaseItemType.WeaponTwoHand:
                    case GBaseItemType.WeaponOneHand:
					if (itemType == GItemType.Axe)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 60);
					if (itemType == GItemType.CeremonialKnife)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 62);
					if (itemType == GItemType.Dagger)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 60);
					if (itemType == GItemType.FistWeapon)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 61);
					if (itemType == GItemType.Mace)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 60);
					if (itemType == GItemType.MightyWeapon)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 61);
					if (itemType == GItemType.Spear)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 61);
					if (itemType == GItemType.Sword)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 60);
					if (itemType == GItemType.Wand)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 62);
					else
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, Settings.Loot.Pickup.WeaponYellowLevel);
                case GBaseItemType.WeaponRange:
					if (itemType == GItemType.HandCrossbow)
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 63);
					else
					return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.WeaponBlueLevel, 65);
                case GBaseItemType.Armor:
					if (itemType == GItemType.Gloves)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);
					if (itemType == GItemType.Bracer)
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, 58);	
					else
						return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);
		//case GBaseItemType.Offhand:
		                       //return CheckLevelRequirements(level, quality, Settings.Loot.Pickup.ArmorBlueLevel, Settings.Loot.Pickup.ArmorYellowLevel);

p.s. since i did this changes, I've start seeing:
[03:44:09.400 Q] [Trinity][CacheManagement]System.AccessViolationException: Could not read bytes from 00000008 [299]!
w Zeta.MemoryManagement.ExternalProcessReader.ReadBytes(IntPtr address, Int32 count, Boolean isRelative)
w Zeta.MemoryManagement.ExternalProcessReader.Read[T](IntPtr address, Boolean isRelative)
w Zeta.Internals.Actors.ACD.[](ACD , Int32 )
w Zeta.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Internals.Actors.DiaUnit.get_IsInvulnerable()
w GilesTrinity.GilesTrinity.RefreshGilesUnit(Boolean AddToCache)
w GilesTrinity.GilesTrinity.RefreshStepMainObjectType(Boolean& AddToCache)
w GilesTrinity.GilesTrinity.CacheDiaObject(DiaObject freshObject)
w GilesTrinity.GilesTrinity.RefreshCacheMainLoop()

it's happening almost every few minutes or sometimes every 1 min....I don't know if it's because of modifying item rules or is it new unified trinity 1.7.1.3 causing this, cause i've seen a lot of people reporting this error, not sure if that often. How do You think is it ok to ignore it?
 
Last edited:
p.s. since i did this changes, I've start seeing:
[03:44:09.400 Q] [Trinity][CacheManagement]System.AccessViolationException: Could not read bytes from 00000008 [299]!
w Zeta.MemoryManagement.ExternalProcessReader.ReadBytes(IntPtr address, Int32 count, Boolean isRelative)
w Zeta.MemoryManagement.ExternalProcessReader.Read[T](IntPtr address, Boolean isRelative)
w Zeta.Internals.Actors.ACD.[](ACD , Int32 )
w Zeta.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Internals.Actors.DiaUnit.get_IsInvulnerable()
w GilesTrinity.GilesTrinity.RefreshGilesUnit(Boolean AddToCache)
w GilesTrinity.GilesTrinity.RefreshStepMainObjectType(Boolean& AddToCache)
w GilesTrinity.GilesTrinity.CacheDiaObject(DiaObject freshObject)
w GilesTrinity.GilesTrinity.RefreshCacheMainLoop()

it's happening almost every few minutes or sometimes every 1 min....I don't know if it's because of modifying item rules or is it new unified trinity 1.7.1.3 causing this, cause i've seen a lot of people reporting this error, not sure if that often. How do You think is it ok to ignore it?
It doesn't appear to have anything to do with what you did, looks like a memory read error on an enemy.
 
This rules work on Trinity 1.7.1.3

I've tried to apply them into 1.7.1.2 but there is no way. DB on startup shows some errors..I've tried only replace item handling files from 1.3 into 1.2.

do You have any idea how to make this rule work in 1.7.1.2 version?? 1.7.1.3 is really shitty, there is lot of bugs and few of them makes botting really hard :/
 
i've tried to add a simple file reading system were you could personalize which items and which level would you want to pick it up.
I wasn't successful, posted my code up on trinity community.

Darkfriend has a pickup sofar, but ill try to do something later.
 
Back
Top