|
You last visited: Today at 15:52
Advertisement
[Release] Muddy's D2NT
Discussion on [Release] Muddy's D2NT within the Diablo 2 Programming forum part of the Diablo 2 category.
01/19/2011, 11:38
|
#571
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by loki-d2
hi muddy ich hab da eine dringende frage.ich hab jetzt meinen gf-barb mit einer neuen
waffe equiped,einer eth botd warpike,zuvor hatte er 2 botd ba´s.das problem ist er killt
jetzt alles mit den ali baba schwertern,was nicht umbegingt gut ist  .
zu meiner frage.wo stelle ich das ein das er mit der pike angreift?
mit sterni klappt es normal,ich will aber deinen bot nutzen.
danke und lg loki.
|
Man kann es von Haus aus gar nicht einstellen.
Vielleicht doch ein Knackpunkt, aber ich fand es besser Funktionen einzuführen, die die Slots nach dem verwendeten Equipment auswählen und nicht wie im standard D2NT einfach mal zum Precast einen Slowechsel durchführen, unabhängig davon ob sinnvoll oder nicht.
Dummerweise ist die Slotwechselfunktion wohl dahingehend unausgereift, dass der Zweihandschaden schlicht ignoriert wird.
Ich denke ich werde die Funktion bei Zeiten nochmal ganz neu schreiben, ist ohnehin etwas schlecht sortiert.
Ich habe die Funktion mal eben angepasst, damit sollte zumindest dein Problem gelöst sein:
Code:
function MWC_GetSlotID(type)
{
var _items, _slotVal, _slotIndex;
// Array format: index 0: Value; index 1: Non-Class BO; index 2: CTA Slot
_slotVal = new Array([0, 0, false], [0, 0, false]);
_items = me.GetItems();
if(_items)
{
for(var i = 0; i < _items.length; i++)
{
if(_items[i].mode == 1)
{
if(_items[i].itemloc == 4 || _items[i].itemloc == 5)
_slotIndex = 0;
else if(_items[i].itemloc == 11 || _items[i].itemloc == 12)
_slotIndex = 1;
else
continue;
switch(type)
{
case "precast":
if((_items[i].itemflag & 0x4000000) && _items[i].itemprefix == 0x5027) // Check if the item is a CTA
_slotVal[_slotIndex][2] = true;
_slotVal[_slotIndex][1] += _items[i].GetStat(97,149); // Non Class Battle Orders
_slotVal[_slotIndex][0] += _items[i].GetStat(127); // All Skills
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
_slotVal[_slotIndex][0] += _items[i].GetStat(107,149) // Class Specific Battle Order
+ _items[i].GetStat(83,4) // Barbarian Skills
+ _items[i].GetStat(188,34); // Warcries Skilltab
break;
case "teleport":
_slotVal[_slotIndex][0] += _items[i].GetStat(105); // Faster Cast Rate
_slotVal[_slotIndex][0] += _items[i].GetStat(127) * 5; // All Skills
break;
case "finditem":
_slotVal[_slotIndex][0] += _items[i].GetStat(79) * 0.75; // Extra Gold
_slotVal[_slotIndex][0] += _items[i].GetStat(80); // Magic Find
_slotVal[_slotIndex][0] += _items[i].GetStat(240); // Magic Find per Level
_slotVal[_slotIndex][0] += _items[i].GetStat(105); // Faster Cast Rate
_slotVal[_slotIndex][0] += _items[i].GetStat(127) * 10; // All Skills
_slotVal[_slotIndex][0] += _items[i].GetStat(83,4) * 10; // Barbarian Skills
_slotVal[_slotIndex][0] += _items[i].GetStat(188,34) * 10; // Warcries Skills
break;
case "attack":
_slotVal[_slotIndex][0] += _items[i].GetStat(21) + (_items[i].GetStat(22) - _items[i].GetStat(21)) / 2; // Base Damage 1H
if(_items[i].GetStat(21) <= 0)
_slotVal[_slotIndex][0] += _items[i].GetStat(23) + (_items[i].GetStat(24) - _items[i].GetStat(23)) / 2; // Base Damage 2H
_slotVal[_slotIndex][0] += (_items[i].GetStat(48) + (_items[i].GetStat(49) - _items[i].GetStat(48)) / 2) / 2; // Fire Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(50) + (_items[i].GetStat(51) - _items[i].GetStat(50)) / 2) / 2; // Light Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(52) + (_items[i].GetStat(53) - _items[i].GetStat(52)) / 2) / 2; // Magic Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(54) + (_items[i].GetStat(55) - _items[i].GetStat(54)) / 2) / 5; // Cold Damage
_slotVal[_slotIndex][0] += _items[i].GetStat(58) * _items[i].GetStat(59) / 256; // Poison Damage
_slotVal[_slotIndex][0] += _items[i].GetStat(111); // + Damage
break;
}
}
}
}
for(var i = 0; i < _slotVal.length; i++)
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN && _slotVal[i][1] > 3)
_slotVal[i][0] += 3;
else
_slotVal[i][0] += _slotVal[i][1];
}
if(_slotVal[0][0] > _slotVal[1][0] && me.classid == NTC_CHAR_CLASS_BARBARIAN || _slotVal[0][2] && !_slotVal[1][2])
return 0;
else if(_slotVal[0][0] < _slotVal[1][0] && me.classid == NTC_CHAR_CLASS_BARBARIAN || !_slotVal[0][2] && _slotVal[1][2])
return 1;
return -1;
}
Einfach die vorhandene Funktion komplett durch diese ersetzen.
Lg
Muddy
|
|
|
01/19/2011, 18:26
|
#572
|
elite*gold: 0
Join Date: Nov 2010
Posts: 605
Received Thanks: 109
|
hi muddy,danke für deine rasche antwort.ich hab die funktion ausgetauscht, dadurch tritt
aber ein fehler auf "type is not defined",in zeile 166 also switch(type)
vl kannst du mir dabei noch helfen. bin heute offline und schau morgen wieder rein.
lg loki
e : ok,ich hab jetzt type durch NTC_CHAR_CLASS_BARBARIAN ausgetauscht und der fehler ist weg
aber er greift noch immer mit ali baba an.ich hab auch versucht den waffen slot zu wechseln.
am besten ich poste mal den ganzen code.
Code:
/**
* This file was modified by
* Check the programming section for updates and further scripts
* Last Update: 11/23/2010
*/
var _MWP_BoSlot = -1;
var _MWP_AttackSlot = -1;
function NTP_DoPrecast(refresh)
{
var _castBoTwice = false;
if(_MWP_AttackSlot < 0)
MWP_SetBoSlot();
if(NTC_InTown())
return false;
if(refresh || !me.GetState(32) || !me.GetState(51) || (me.classid == NTC_CHAR_CLASS_BARBARIAN && !me.GetState(26)))
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN || _MWP_BoSlot > -1)
{
NTC_SwapWeapons(_MWP_BoSlot);
NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command
NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
NTC_CastSkill(138, NTC_HAND_RIGHT); // Shout
NTC_SwapWeapons(_MWP_AttackSlot);
}
}
switch(me.classid)
{
case NTC_CHAR_CLASS_AMAZON:
if(refresh)
{
_castBoTwice = true;
NTC_CastSkill(32, NTC_HAND_RIGHT); // Valkyrie
}
break;
case NTC_CHAR_CLASS_SORCERESS:
if(refresh || !me.GetState(38))
NTC_CastSkill(57, NTC_HAND_RIGHT); // Thunder Storm
if(refresh || !me.GetState(30))
NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield
if(refresh || (!me.GetState(10) && !me.GetState(88) && !me.GetState(20)))
{
if(!NTC_CastSkill(50, NTC_HAND_RIGHT)) // Shiver Armor
if(!NTC_CastSkill(60, NTC_HAND_RIGHT)) // Chilling Armor
NTC_CastSkill(40, NTC_HAND_RIGHT); // Frozen Armor
}
break;
case NTC_CHAR_CLASS_NECROMANCER:
if(refresh || !me.GetState(14))
NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
if(MWP_SummonGolem())
{
if(NTConfig_AttackSkill[7] == 0 || !NTC_CastSkill(NTConfig_AttackSkill[7], NTC_HAND_RIGHT))
{
if(!NTC_CastSkill(75, NTC_HAND_RIGHT)) // Clay Golem
{
if(!NTC_CastSkill(85, NTC_HAND_RIGHT)) // Blood Golem
{
NTC_CastSkill(94, NTC_HAND_RIGHT); // Fire Golem
}
}
}
_castBoTwice = true;
}
break;
case NTC_CHAR_CLASS_PALADIN:
if(refresh || !me.GetState(101))
NTC_CastSkill(117, NTC_HAND_RIGHT); // Holy Shield
break;
case NTC_CHAR_CLASS_DRUID:
if(refresh || !me.GetState(151))
NTC_CastSkill(235, NTC_HAND_RIGHT); // Cyclone Armor
if(refresh || !me.GetState(149))
{
_castBoTwice = true;
NTC_CastSkill(226, NTC_HAND_RIGHT); // Oak Sage
}
if(refresh)
{
_castBoTwice = true;
NTC_CastSkill(247, NTC_HAND_RIGHT); // Summon Grizzly
}
if(refresh || !me.GetState(144))
NTC_CastSkill(250, NTC_HAND_RIGHT); // Hurricane
break;
case NTC_CHAR_CLASS_ASSASSIN:
// Can't use both Fade and BoS
//if(refresh || !me.GetState(157))
// NTC_CastSkill(258, NTC_HAND_RIGHT); // Burst of Speed
if(refresh || !me.GetState(159))
NTC_CastSkill(267, NTC_HAND_RIGHT); // Fade
if(refresh || !me.GetState(158))
NTC_CastSkill(277, NTC_HAND_RIGHT); // Blade Shield
if(refresh || !me.GetState(153))
NTC_CastSkill(264, NTC_HAND_RIGHT); // Cloak of Shadows
if(refresh)
{
_castBoTwice = true;
if(!NTC_CastSkill(279, NTC_HAND_RIGHT)) // Shadow Master
NTC_CastSkill(268, NTC_HAND_RIGHT); // Shadow Warrior
}
break;
}
if(_castBoTwice)
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN || _MWP_BoSlot > -1)
{
NTC_SwapWeapons(_MWP_BoSlot);
NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command
NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
NTC_CastSkill(138, NTC_HAND_RIGHT); // Shout
NTC_SwapWeapons(_MWP_AttackSlot);
}
}
}
function MWP_SetBoSlot()
{
var _items, _slotVal, _slotIndex;
// Array format: index 0: Value; index 1: Non-Class BO; index 2: CTA Slot
_slotVal = new Array([0, 0, false], [0, 0, false]);
_items = me.GetItems();
if(_items)
{
for(var i = 0; i < _items.length; i++)
{
if(_items[i].mode == 1)
{
if(_items[i].itemloc == 4 || _items[i].itemloc == 5)
_slotIndex = 0;
else if(_items[i].itemloc == 11 || _items[i].itemloc == 12)
_slotIndex = 1;
else
continue;
switch(NTC_CHAR_CLASS_BARBARIAN)
{
case "precast":
if((_items[i].itemflag & 0x4000000) && _items[i].itemprefix == 0x5027) // Check if the item is a CTA
_slotVal[_slotIndex][2] = true;
_slotVal[_slotIndex][1] += _items[i].GetStat(97,149); // Non Class Battle Orders
_slotVal[_slotIndex][0] += _items[i].GetStat(127); // All Skills
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
_slotVal[_slotIndex][0] += _items[i].GetStat(107,149) // Class Specific Battle Order
+ _items[i].GetStat(83,4) // Barbarian Skills
+ _items[i].GetStat(188,34); // Warcries Skilltab
break;
case "teleport":
_slotVal[_slotIndex][0] += _items[i].GetStat(105); // Faster Cast Rate
_slotVal[_slotIndex][0] += _items[i].GetStat(127) * 5; // All Skills
break;
case "finditem":
_slotVal[_slotIndex][0] += _items[i].GetStat(79) * 0.75; // Extra Gold
_slotVal[_slotIndex][0] += _items[i].GetStat(80); // Magic Find
_slotVal[_slotIndex][0] += _items[i].GetStat(240); // Magic Find per Level
_slotVal[_slotIndex][0] += _items[i].GetStat(105); // Faster Cast Rate
_slotVal[_slotIndex][0] += _items[i].GetStat(127) * 10; // All Skills
_slotVal[_slotIndex][0] += _items[i].GetStat(83,4) * 10; // Barbarian Skills
_slotVal[_slotIndex][0] += _items[i].GetStat(188,34) * 10; // Warcries Skills
break;
case "attack":
_slotVal[_slotIndex][0] += _items[i].GetStat(21) + (_items[i].GetStat(22) - _items[i].GetStat(21)) / 2; // Base Damage 1H
if(_items[i].GetStat(21) <= 0)
_slotVal[_slotIndex][0] += _items[i].GetStat(23) + (_items[i].GetStat(24) - _items[i].GetStat(23)) / 2; // Base Damage 2H
_slotVal[_slotIndex][0] += (_items[i].GetStat(48) + (_items[i].GetStat(49) - _items[i].GetStat(48)) / 2) / 2; // Fire Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(50) + (_items[i].GetStat(51) - _items[i].GetStat(50)) / 2) / 2; // Light Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(52) + (_items[i].GetStat(53) - _items[i].GetStat(52)) / 2) / 2; // Magic Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(54) + (_items[i].GetStat(55) - _items[i].GetStat(54)) / 2) / 5; // Cold Damage
_slotVal[_slotIndex][0] += _items[i].GetStat(58) * _items[i].GetStat(59) / 256; // Poison Damage
_slotVal[_slotIndex][0] += _items[i].GetStat(111); // + Damage
break;
}
}
}
}
for(var i = 0; i < _slotVal.length; i++)
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN && _slotVal[i][1] > 3)
_slotVal[i][0] += 3;
else
_slotVal[i][0] += _slotVal[i][1];
}
if(_slotVal[0][0] > _slotVal[1][0] && me.classid == NTC_CHAR_CLASS_BARBARIAN || _slotVal[0][2] && !_slotVal[1][2])
return 0;
else if(_slotVal[0][0] < _slotVal[1][0] && me.classid == NTC_CHAR_CLASS_BARBARIAN || !_slotVal[0][2] && _slotVal[1][2])
return 1;
return -1;
}
function MWP_SummonGolem()
{
var _golem, _parent;
// Check if we already got any kind of golem
_golem = NTC_FindUnit(NTC_UNIT_MONSTER);
if(!_golem)
return false;
do
{
if(_golem.classid >= 289 && _golem.classid <= 292)
{
_parent = _golem.GetParent();
if(_parent && _parent.name == me.name) // Check if the monster object that appears to be a golem is actually ours
return false;
}
} while(_golem.GetNext());
return true;
}
hoffe das stimmt so
lg loki
|
|
|
01/19/2011, 19:47
|
#573
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by loki-d2
hi muddy,danke für deine rasche antwort.ich hab die funktion ausgetauscht, dadurch tritt
aber ein fehler auf "type is not defined",in zeile 166 also switch(type)
vl kannst du mir dabei noch helfen. bin heute offline und schau morgen wieder rein.
lg loki
e : ok,ich hab jetzt type durch NTC_CHAR_CLASS_BARBARIAN ausgetauscht und der fehler ist weg
aber er greift noch immer mit ali baba an.ich hab auch versucht den waffen slot zu wechseln.
am besten ich poste mal den ganzen code.
Code:
/**
* This file was modified by
* Check the programming section for updates and further scripts
* Last Update: 11/23/2010
*/
var _MWP_BoSlot = -1;
var _MWP_AttackSlot = -1;
function NTP_DoPrecast(refresh)
{
var _castBoTwice = false;
if(_MWP_AttackSlot < 0)
MWP_SetBoSlot();
if(NTC_InTown())
return false;
if(refresh || !me.GetState(32) || !me.GetState(51) || (me.classid == NTC_CHAR_CLASS_BARBARIAN && !me.GetState(26)))
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN || _MWP_BoSlot > -1)
{
NTC_SwapWeapons(_MWP_BoSlot);
NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command
NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
NTC_CastSkill(138, NTC_HAND_RIGHT); // Shout
NTC_SwapWeapons(_MWP_AttackSlot);
}
}
switch(me.classid)
{
case NTC_CHAR_CLASS_AMAZON:
if(refresh)
{
_castBoTwice = true;
NTC_CastSkill(32, NTC_HAND_RIGHT); // Valkyrie
}
break;
case NTC_CHAR_CLASS_SORCERESS:
if(refresh || !me.GetState(38))
NTC_CastSkill(57, NTC_HAND_RIGHT); // Thunder Storm
if(refresh || !me.GetState(30))
NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield
if(refresh || (!me.GetState(10) && !me.GetState(88) && !me.GetState(20)))
{
if(!NTC_CastSkill(50, NTC_HAND_RIGHT)) // Shiver Armor
if(!NTC_CastSkill(60, NTC_HAND_RIGHT)) // Chilling Armor
NTC_CastSkill(40, NTC_HAND_RIGHT); // Frozen Armor
}
break;
case NTC_CHAR_CLASS_NECROMANCER:
if(refresh || !me.GetState(14))
NTC_CastSkill(68, NTC_HAND_RIGHT); // Bone Armor
if(MWP_SummonGolem())
{
if(NTConfig_AttackSkill[7] == 0 || !NTC_CastSkill(NTConfig_AttackSkill[7], NTC_HAND_RIGHT))
{
if(!NTC_CastSkill(75, NTC_HAND_RIGHT)) // Clay Golem
{
if(!NTC_CastSkill(85, NTC_HAND_RIGHT)) // Blood Golem
{
NTC_CastSkill(94, NTC_HAND_RIGHT); // Fire Golem
}
}
}
_castBoTwice = true;
}
break;
case NTC_CHAR_CLASS_PALADIN:
if(refresh || !me.GetState(101))
NTC_CastSkill(117, NTC_HAND_RIGHT); // Holy Shield
break;
case NTC_CHAR_CLASS_DRUID:
if(refresh || !me.GetState(151))
NTC_CastSkill(235, NTC_HAND_RIGHT); // Cyclone Armor
if(refresh || !me.GetState(149))
{
_castBoTwice = true;
NTC_CastSkill(226, NTC_HAND_RIGHT); // Oak Sage
}
if(refresh)
{
_castBoTwice = true;
NTC_CastSkill(247, NTC_HAND_RIGHT); // Summon Grizzly
}
if(refresh || !me.GetState(144))
NTC_CastSkill(250, NTC_HAND_RIGHT); // Hurricane
break;
case NTC_CHAR_CLASS_ASSASSIN:
// Can't use both Fade and BoS
//if(refresh || !me.GetState(157))
// NTC_CastSkill(258, NTC_HAND_RIGHT); // Burst of Speed
if(refresh || !me.GetState(159))
NTC_CastSkill(267, NTC_HAND_RIGHT); // Fade
if(refresh || !me.GetState(158))
NTC_CastSkill(277, NTC_HAND_RIGHT); // Blade Shield
if(refresh || !me.GetState(153))
NTC_CastSkill(264, NTC_HAND_RIGHT); // Cloak of Shadows
if(refresh)
{
_castBoTwice = true;
if(!NTC_CastSkill(279, NTC_HAND_RIGHT)) // Shadow Master
NTC_CastSkill(268, NTC_HAND_RIGHT); // Shadow Warrior
}
break;
}
if(_castBoTwice)
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN || _MWP_BoSlot > -1)
{
NTC_SwapWeapons(_MWP_BoSlot);
NTC_CastSkill(155, NTC_HAND_RIGHT); // Battle Command
NTC_CastSkill(149, NTC_HAND_RIGHT); // Battle Orders
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
NTC_CastSkill(138, NTC_HAND_RIGHT); // Shout
NTC_SwapWeapons(_MWP_AttackSlot);
}
}
}
function MWP_SetBoSlot()
{
var _items, _slotVal, _slotIndex;
// Array format: index 0: Value; index 1: Non-Class BO; index 2: CTA Slot
_slotVal = new Array([0, 0, false], [0, 0, false]);
_items = me.GetItems();
if(_items)
{
for(var i = 0; i < _items.length; i++)
{
if(_items[i].mode == 1)
{
if(_items[i].itemloc == 4 || _items[i].itemloc == 5)
_slotIndex = 0;
else if(_items[i].itemloc == 11 || _items[i].itemloc == 12)
_slotIndex = 1;
else
continue;
switch(NTC_CHAR_CLASS_BARBARIAN)
{
case "precast":
if((_items[i].itemflag & 0x4000000) && _items[i].itemprefix == 0x5027) // Check if the item is a CTA
_slotVal[_slotIndex][2] = true;
_slotVal[_slotIndex][1] += _items[i].GetStat(97,149); // Non Class Battle Orders
_slotVal[_slotIndex][0] += _items[i].GetStat(127); // All Skills
if(me.classid == NTC_CHAR_CLASS_BARBARIAN)
_slotVal[_slotIndex][0] += _items[i].GetStat(107,149) // Class Specific Battle Order
+ _items[i].GetStat(83,4) // Barbarian Skills
+ _items[i].GetStat(188,34); // Warcries Skilltab
break;
case "teleport":
_slotVal[_slotIndex][0] += _items[i].GetStat(105); // Faster Cast Rate
_slotVal[_slotIndex][0] += _items[i].GetStat(127) * 5; // All Skills
break;
case "finditem":
_slotVal[_slotIndex][0] += _items[i].GetStat(79) * 0.75; // Extra Gold
_slotVal[_slotIndex][0] += _items[i].GetStat(80); // Magic Find
_slotVal[_slotIndex][0] += _items[i].GetStat(240); // Magic Find per Level
_slotVal[_slotIndex][0] += _items[i].GetStat(105); // Faster Cast Rate
_slotVal[_slotIndex][0] += _items[i].GetStat(127) * 10; // All Skills
_slotVal[_slotIndex][0] += _items[i].GetStat(83,4) * 10; // Barbarian Skills
_slotVal[_slotIndex][0] += _items[i].GetStat(188,34) * 10; // Warcries Skills
break;
case "attack":
_slotVal[_slotIndex][0] += _items[i].GetStat(21) + (_items[i].GetStat(22) - _items[i].GetStat(21)) / 2; // Base Damage 1H
if(_items[i].GetStat(21) <= 0)
_slotVal[_slotIndex][0] += _items[i].GetStat(23) + (_items[i].GetStat(24) - _items[i].GetStat(23)) / 2; // Base Damage 2H
_slotVal[_slotIndex][0] += (_items[i].GetStat(48) + (_items[i].GetStat(49) - _items[i].GetStat(48)) / 2) / 2; // Fire Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(50) + (_items[i].GetStat(51) - _items[i].GetStat(50)) / 2) / 2; // Light Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(52) + (_items[i].GetStat(53) - _items[i].GetStat(52)) / 2) / 2; // Magic Damage
_slotVal[_slotIndex][0] += (_items[i].GetStat(54) + (_items[i].GetStat(55) - _items[i].GetStat(54)) / 2) / 5; // Cold Damage
_slotVal[_slotIndex][0] += _items[i].GetStat(58) * _items[i].GetStat(59) / 256; // Poison Damage
_slotVal[_slotIndex][0] += _items[i].GetStat(111); // + Damage
break;
}
}
}
}
for(var i = 0; i < _slotVal.length; i++)
{
if(me.classid == NTC_CHAR_CLASS_BARBARIAN && _slotVal[i][1] > 3)
_slotVal[i][0] += 3;
else
_slotVal[i][0] += _slotVal[i][1];
}
if(_slotVal[0][0] > _slotVal[1][0] && me.classid == NTC_CHAR_CLASS_BARBARIAN || _slotVal[0][2] && !_slotVal[1][2])
return 0;
else if(_slotVal[0][0] < _slotVal[1][0] && me.classid == NTC_CHAR_CLASS_BARBARIAN || !_slotVal[0][2] && _slotVal[1][2])
return 1;
return -1;
}
function MWP_SummonGolem()
{
var _golem, _parent;
// Check if we already got any kind of golem
_golem = NTC_FindUnit(NTC_UNIT_MONSTER);
if(!_golem)
return false;
do
{
if(_golem.classid >= 289 && _golem.classid <= 292)
{
_parent = _golem.GetParent();
if(_parent && _parent.name == me.name) // Check if the monster object that appears to be a golem is actually ours
return false;
}
} while(_golem.GetNext());
return true;
}
hoffe das stimmt so
lg loki
|
Nein, da hast du dich versehen.
Die zu ersetzende Funktion findest du in der NTCommon und nicht in der NTPrecast library.
Das Präfix im Namen einer Funktion - mal angenommen ihr Autor hat Wert auf einen halbwegs guten Programmierstil gelegt - verweist immer auf die library, in der die Funktion implementiert ist.
Beginnt die Funktion mit MWC bzw. NTC, heisst das, sie ist in der NTCommon library implementiert, MWL verweist auf eine Implementierung innerhalb der MWLoot library und so weiter.
Solche Präfixe nutzt man übrigens auch gerne für globale Variablen, weil dadurch der Definitionskontext direkt ersichtlich ist.
Hier einmal die alte MWP_SetBoSlot() Funktion zur Wiederherstellung, solltest du sie vor der Verunstaltung nicht zwischengespeichert haben:
Code:
function MWP_SetBoSlot()
{
_MWP_BoSlot = MWC_GetSlotID("precast");
if(_MWP_BoSlot == -1)
{
_MWP_BoSlot = me.weaponstab;
_MWP_AttackSlot = me.weaponstab;
}
else if(_MWP_BoSlot == 0)
_MWP_AttackSlot = 1;
else
_MWP_AttackSlot = 0;
}
Achte darauf, dass du diesmal die richtige Funktion ersetzt, die Funktionsnamen sollten dabei übereinstimmen.
Lg
Muddy
|
|
|
01/19/2011, 19:47
|
#574
|
elite*gold: 0
Join Date: Jan 2011
Posts: 17
Received Thanks: 0
|
hab deinen bot mal runtergeladen um mal zu schaun wie er so is ^^
aber nach dem einstellen kam dann die meldung /MWBotGame.ntj(56) : reference err. NTLoadConfig not defined
kannste mir nen rat geben was es ein könnte?ich schau derweil ob ich irgendwo zeichen fehler gemacht hab,oder sowas in der art
danke im vorraus
€ : hab ich  ich kontrollier grad alles nochmal durch
|
|
|
01/19/2011, 19:51
|
#575
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by black/heart
hab deinen bot mal runtergeladen um mal zu schaun wie er so is ^^
aber nach dem einstellen kam dann die meldung /MWBotGame.ntj(56) : reference err. NTLoadConfig not defined
kannste mir nen rat geben was es ein könnte?ich schau derweil ob ich irgendwo zeichen fehler gemacht hab,oder sowas in der art
danke im vorraus
|
Deine Char Config ist entweder falsch benannt, oder enthält Syntaxfehler.
Nimm dir Zeit beim Einstellen und achte darauf, dass etwaige von dir durchgeführte Änderungen mit der JavaScript Syntax konform sind.
Lg
Muddy
P.S.: Wenns gar nicht klappt poste die Charconfig in einer [Code]-Box, dann schaue ich mal drüber.
|
|
|
01/19/2011, 21:07
|
#576
|
elite*gold: 0
Join Date: Apr 2010
Posts: 344
Received Thanks: 173
|
Ahoi!
Ich wollt mich eben davor drücken den Konjunktiv im Perfektstamm der a,e und konsonantischer Konjugation in Latein zu lernen und dacht mir ich teil mal meine lustige Idee
Freunde whispen, wenn Item gefunden wurde. Es sei vielleicht angemerkt, dass ich nich diese Botversion benutze (sonder die Muddies-Extended) und deswegen die Functions bisschen anders heißen, es soll ja auch nur ne Idee sein :
NTSnagit.ntl (Aus Muddies-Extended) modifiziert.:
Code:
var _NTSI_IgnoredList = new Array(
526, // Arrows quiver
528, // Bolts quiver
543, // Keys
518, // Tome of Town Portal
519, // Tome of Identify
529, // Scroll of Town Portal
530, // Scroll of Identify
514, // Antidote potion
513, // Stamina potion
517, // Thawing potion
80, // Rancid Gas Pot
81, // Oil Potion
82, // Choking Gas Pot
83, // Exploding Pot
84, // Strangling Gas
85); // Fulminating Pot
var _NTSI_BeltSize;
var lastItemQuality;
var lastItemName;
var lastItemItemLevel;
var lastItemDesc;
function NTSI_LoadNIPFiles(filepath)
{
for(var i = 0 ; i < NTConfig_NIPFilePath.length ; i++)
NTIPOpenFile(filepath + "/" + NTConfig_NIPFilePath[i]);
_NTSI_BeltSize = NTC_GetBeltSize();
}
function NTSI_PickItems()
{
var i, _mode;
for(i = 0 ; i < 25 ; i++)
{
_mode = me.mode;
if((_mode >= 1 && _mode <= 3) || _mode == 5 || _mode == 6)
break;
NTC_Delay(NTC_DELAY_FRAME);
}
if(i < parseInt(NTConfig_SnagDelay/NTC_DELAY_FRAME))
NTC_PingDelay(NTConfig_SnagDelay-(i*NTC_DELAY_FRAME));
Include("libs/common/NTItemlogger.ntl");
NTI_WriteLoc();
NTSI_SnagIt();
}
function NTSI_SnagIt()
{
var i;
var _item;
var _checkeditem, _checkeditems;
var _value;
var _minindex, _mindistance;
_item = NTC_FindUnit(NTC_UNIT_ITEM);
if(!_item)
return;
_checkeditems = new Array();
do
{
if(_item.mode == 3 || _item.mode == 5)
{
if(NTSI_IsIgnoredItemInt(_item.classid))
continue;
if(GetDistance(me, _item) <= NTConfig_SnagRange)
{
_value = NTSI_CheckItem(_item);
if(_value)
_checkeditems.push(new NTSI_ItemInt(_item, _value));
}
}
} while(_item.GetNext());
while(_checkeditems.length > 0)
{
_mindistance = 100000;
for(i = 0 ; i < _checkeditems.length ; i++)
{
_value = GetDistance(me.x, me.y, _checkeditems[i].x, _checkeditems[i].y);
if(_value < _mindistance)
{
_minindex = i;
_mindistance = _value;
}
}
_checkeditem = _checkeditems.splice(_minindex, 1)[0];
_item = NTC_FindUnit(NTC_UNIT_ITEM, _checkeditem.GID);
if(_item)
{
if(!NTSI_IsLimitedItemInt(_item))
{
if(NTT_CheckSpace(_item.xsize, _item.ysize))
{
if(NTSI_PickUpItemInt(_item) && _item)
{
var _outputColor = "";
var _outputColorMGR = "";
if((_item.classid >= 644 && _item.classid <= 658) || (_item.classid >= 531 && _item.classid <= 555) || (_item.classid >= 610 && _item.classid <= 642))
{
_outputColor = NTC_ItemQualityToD2Color[8];
_outputColorMGR = NTC_ItemQualityToMGRColor[8];
}
else
{
_outputColor = NTC_ItemQualityToD2Color[_item.quality];
_outputColorMGR = NTC_ItemQualityToMGRColor[_item.quality];
}
if(_item && (_item.itemtype < 76 || _item.itemtype > 81) && _checkeditem.ClassID != 523 )
Print("Picked up " + _outputColor + _item.name.split("\n")[0]);
if(NTConfig_ShowGoldPickups && _checkeditem.ClassID == 523)
Print("Picked up Gold");
if(_item && NTConfig_ShowPotionPickups && _item.itemtype >= 76 && _item.itemtype <= 78)
Print("Picked " + _item.name.split("\n")[0]);
if(_item.quality < 4 && _checkeditem.Status < 2 && _item.itemtype != 4 && (_item.itemtype < 76 || _item.itemtype > 81))
{
var _isEthereal = ((_item.itemflag & 0x400000) == 0x400000) ? 1 : 0;
if(NTConfig_UseXMLItemlog)
{
if(NTI_WriteLog(_item, me, _isEthereal, 0))
{
NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + _outputColorMGR + _item.name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _item.itemdesc + "\nÿc5Item Level: " + _item.itemlevel);
Say("/f m Just found " + _item.name + " at " + NTI_ReadLoc() + "!");
}
}
else
{
NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + _outputColorMGR + _item.name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _item.itemdesc + "\nÿc5Item Level: " + _item.itemlevel);
[COLOR="Red"] Say("/f m Just found " + _item.name + " at " + NTI_ReadLoc() + "!");[/COLOR]
}
}
}
}
else
{
if(!_checkeditem.Retry)
{
_checkeditem.Retry = true;
if(!NTTMGR_VisitTown())
return;
_checkeditems.push(_checkeditem);
}
}
}
}
}
}
function NTSI_CheckItem(item)
{
var _result;
switch(item.quality)
{
case 5:
case 8:
_result = NTIPCheckItem(item);
break;
default:
_result = NTIPCheckItem(item);
if(NTCU_CheckItem(item, _result))
_result = 2;
break;
}
return _result;
}
// Internal function
function NTSI_ItemInt(item, checkedstatus)
{
this.ClassID = item.classid;
this.GID = item.gid;
this.x = item.x;
this.y = item.y;
this.Status = checkedstatus;
this.Retry = false;
}
function NTSI_PickUpItemInt(snagitem)
{
var i;
var _classid;
_classid = snagitem.classid;
for(i = 0 ; i < 40 ; i++)
{
if((i % 10) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
{
if(GetDistance(me, snagitem) > 3)
NTM_MoveTo(snagitem.areaid, snagitem.x, snagitem.y);
if(NTC_ClearCursor())
NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, snagitem);
}
NTC_Delay(NTC_DELAY_FRAME);
if(_classid == 523 || (snagitem.mode != 3 && snagitem.mode != 5))
{
NTC_PingDelay(100);
return true;
}
}
return false;
}
function NTSI_IsIgnoredItemInt(classid)
{
for(var i = 0 ; i < _NTSI_IgnoredList.length ; i++)
{
if(classid == _NTSI_IgnoredList[i])
return true;
}
return false;
}
function NTSI_IsLimitedItemInt(item)
{
var i;
var _items;
if(item.itemtype >= 76 && item.itemtype <= 78)
{
var _code, _type;
var _potnum = 0;
_code = item.code;
_type = item.itemtype;
for(i = 0 ; i < 4 ; i++)
{
if(_code.indexOf(NTConfig_BeltColType[i]) != -1)
_potnum += _NTSI_BeltSize;
}
_items = me.GetItems();
if(_items)
{
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 2 && _items[i].itemtype == _type)
_potnum--;
}
if(_potnum < 1)
return true;
}
}
else if(item.quality == 7 && item.classid >= 603 && item.classid <= 605)
{
_items = me.GetItems(item.classid);
if(_items)
{
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].quality == 7)
return true;
}
}
}
return false;
}
NTTownManager.ntl (ebenfalls aus Muddies-Extended), modifiziert.:
Code:
var _NTTMGR_BuyPots;
var _NTTMGR_BuyTP;
var _NTTMGR_BuyKey;
var _NTTMGR_DoHeal;
var _NTTMGR_DoID;
var _NTTMGR_DoRepair;
var _NTTMGR_DoRevive;
var _NTTMGR_RemoveCurse;
function NTTMGR_TownManager(simple)
{
var _cubing;
if(arguments.length < 1)
simple = false;
NTC_ClearCursor();
NTT_CleanPotions();
_NTTMGR_BuyPots = NTT_CheckBelt();
_NTTMGR_BuyTP = (NTTMGR_CheckScrolls(1) < 4);
_NTTMGR_BuyKey = (NTConfig_OpenChest && NTTMGR_CheckKeys() < 4);
_NTTMGR_DoHeal = NTT_CheckHeal();
_NTTMGR_DoID = NTT_CheckUnids();
_NTTMGR_DoRepair = NTT_CheckRepair(40);
_NTTMGR_DoRevive = NTT_CheckMerc();
_NTTMGR_RemoveCurse = NTTMGR_CheckCurse(NTConfig_CheckSelfSafe > 0x01 ? 0x7E : 0, NTConfig_CheckMercSafe > 0x01 ? 0x7E : 0);
NTCU_InitCubing();
NTC_PutSkill(115, NTC_HAND_RIGHT);
switch(me.act)
{
case 1:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_BuyKey || _NTTMGR_DoID)
NTTMGR_VisitAkara();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
if(_NTTMGR_DoRevive)
NTTMGR_VisitKashya();
if(_NTTMGR_DoRepair)
NTTMGR_VisitCharsi();
if(!simple && NTConfig_Gamble && NTC_MyGold() > NTConfig_GambleStartGold)
{
NTTMGR_VisitGheed();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
}
break;
case 2:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_DoRepair)
NTTMGR_VisitFara();
if(_NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_DoID)
NTTMGR_VisitDrognan();
if(_NTTMGR_BuyKey)
NTTMGR_VisitLysander();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
if(_NTTMGR_DoRevive)
NTTMGR_VisitGreiz();
if(!simple && NTConfig_Gamble && NTC_MyGold() > NTConfig_GambleStartGold)
{
NTTMGR_VisitElzix();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
}
break;
case 3:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_DoID)
NTTMGR_VisitOrmus();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
if(_NTTMGR_DoRevive)
NTTMGR_VisitAsheara();
if(_NTTMGR_DoRepair || _NTTMGR_BuyKey)
NTTMGR_VisitHratli();
if(!simple && NTConfig_Gamble && NTC_MyGold() > NTConfig_GambleStartGold)
{
NTTMGR_VisitAlkor();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
}
break;
case 4:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_BuyKey || _NTTMGR_DoID)
NTTMGR_VisitJamella(false);
if(_NTTMGR_DoRepair)
NTTMGR_VisitHalbu();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
if(_NTTMGR_DoRevive)
NTTMGR_VisitTyrael();
if(!simple && NTConfig_Gamble && NTC_MyGold() > NTConfig_GambleStartGold)
{
NTTMGR_VisitJamella(true);
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
}
break;
case 5:
if(_NTTMGR_DoHeal || _NTTMGR_RemoveCurse || _NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_BuyKey || _NTTMGR_DoID)
NTTMGR_VisitMalah();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
if(_NTTMGR_DoRepair)
NTTMGR_VisitLarzuk();
if(_NTTMGR_DoRevive)
NTTMGR_VisitQualKehk();
if(!simple && NTConfig_Gamble && NTC_MyGold() > NTConfig_GambleStartGold)
{
NTTMGR_VisitAnya();
_cubing = (!simple && NTCU_CheckCubing());
if(_cubing || NTT_CheckInventory())
NTTMGR_VisitStash(_cubing);
}
break;
}
}
function NTTMGR_VisitTown()
{
var _prearea = me.areaid;
if(!NTTM_CheckAct())
return false;
NTTMGR_TownManager(true);
if(!NTTM_TownMove("portalspot"))
return false;
if(!NTM_UsePortal("BluePortal", _prearea))
return false;
if(NTConfig_PublicMode)
NTM_MakeTP();
return true;
}
function NTTMGR_VisitStash(cubing)
{
var _stash;
NTTM_TownMove("stash");
_stash = NTC_FindUnit(NTC_UNIT_OBJECT, NTC_UNIT_STASH, 5);
if(_stash)
{
if(NTT_DoInteract(_stash))
{
NTT_ManageStash();
if(cubing)
{
NTCU_DoCubing();
if(NTT_DoInteract(_stash))
NTT_ManageStash();
me.Cancel(1);
NTT_ClearInventory();
}
else
me.Cancel(1);
}
}
}
function NTTMGR_VisitAkara()
{
var _npc;
NTTM_TownMove("akara");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_AKARA, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(_NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_BuyKey || _NTTMGR_DoID)
{
if(NTT_DoTrade(_npc))
{
if(_NTTMGR_BuyPots)
NTT_FillBelt(_npc);
if(_NTTMGR_BuyTP)
NTT_FillTome(_npc, 1);
if(_NTTMGR_BuyKey)
NTT_FillKey(_npc);
if(_NTTMGR_DoID)
NTTMGR_IDItems(_npc);
}
}
me.Cancel(1);
}
}
}
function NTTMGR_VisitKashya()
{
var _npc;
NTTM_TownMove("kashya");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_KASHYA, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
NTT_ReviveMerc();
me.Cancel(1);
if(NTConfig_ResetWeapon)
NTT_ResetWeaponMerc();
}
}
}
function NTTMGR_VisitCharsi()
{
var _npc;
NTTM_TownMove("charsi");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_CHARSI, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc))
NTT_RepairItems(_npc);
me.Cancel(1);
}
}
}
function NTTMGR_VisitGheed()
{
var _npc;
NTTM_TownMove("gheed");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_GHEED, 5);
if(_npc)
{
while(NTC_MyGold() > NTConfig_GambleStopGold)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc, 1))
NTT_GambleIt(_npc);
me.Cancel(1);
}
else
break;
}
}
}
function NTTMGR_VisitFara()
{
var _npc;
NTTM_TownMove("fara");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_FARA, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(_NTTMGR_DoRepair)
{
if(NTT_DoTrade(_npc))
NTT_RepairItems(_npc);
}
me.Cancel(1);
}
}
}
function NTTMGR_VisitDrognan()
{
var _npc;
NTTM_TownMove("drognan");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_DROGNAN, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc))
{
if(_NTTMGR_BuyPots)
NTT_FillBelt(_npc);
if(_NTTMGR_BuyTP)
NTT_FillTome(_npc, 1);
if(_NTTMGR_DoID)
NTTMGR_IDItems(_npc);
}
me.Cancel(1);
}
}
}
function NTTMGR_VisitLysander()
{
var _npc;
NTTM_TownMove("lysander");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_LYSANDER, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc))
NTT_FillKey(_npc);
me.Cancel(1);
}
}
}
function NTTMGR_VisitGreiz()
{
var _npc;
NTTM_TownMove("greiz");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_GREIZ, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
NTT_ReviveMerc();
me.Cancel(1);
if(NTConfig_ResetWeapon)
NTT_ResetWeaponMerc();
}
}
}
function NTTMGR_VisitElzix()
{
var _npc;
NTTM_TownMove("elzix");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_ELZIX, 5);
if(_npc)
{
while(NTC_MyGold() > NTConfig_GambleStopGold)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc, 1))
NTT_GambleIt(_npc);
me.Cancel(1);
}
else
break;
}
}
}
function NTTMGR_VisitOrmus()
{
var _npc;
NTTM_TownMove("ormus");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_ORMUS, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(_NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_DoID)
{
if(NTT_DoTrade(_npc))
{
if(_NTTMGR_BuyPots)
NTT_FillBelt(_npc);
if(_NTTMGR_BuyTP)
NTT_FillTome(_npc, 1);
if(_NTTMGR_DoID)
NTTMGR_IDItems(_npc);
}
}
me.Cancel(1);
}
}
}
function NTTMGR_VisitAsheara()
{
var _npc;
NTTM_TownMove("asheara");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_ASHEARA, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
NTT_ReviveMerc();
me.Cancel(1);
if(NTConfig_ResetWeapon)
NTT_ResetWeaponMerc();
}
}
}
function NTTMGR_VisitHratli()
{
var _npc;
NTTM_TownMove("hratli");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_HRATLI, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc))
{
if(_NTTMGR_DoRepair)
NTT_RepairItems(_npc);
if(_NTTMGR_BuyKey)
NTT_FillKey(_npc);
}
me.Cancel(1);
}
}
}
function NTTMGR_VisitAlkor()
{
var _npc;
NTTM_TownMove("alkor");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_ALKOR, 5);
if(_npc)
{
while(NTC_MyGold() > NTConfig_GambleStopGold)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc, 1))
NTT_GambleIt(_npc);
me.Cancel(1);
}
else
break;
}
}
}
function NTTMGR_VisitJamella(gamble)
{
var _npc;
NTTM_TownMove("jamella");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_JAMELLA, 5);
if(_npc)
{
if(gamble)
{
while(NTC_MyGold() > NTConfig_GambleStopGold)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc, 1))
NTT_GambleIt(_npc);
me.Cancel(1);
}
else
break;
}
}
else
{
if(NTT_DoInteract(_npc))
{
if(_NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_BuyKey || _NTTMGR_DoID)
{
if(NTT_DoTrade(_npc))
{
if(_NTTMGR_BuyPots)
NTT_FillBelt(_npc);
if(_NTTMGR_BuyTP)
NTT_FillTome(_npc, 1);
if(_NTTMGR_BuyKey)
NTT_FillKey(_npc);
if(_NTTMGR_DoID)
NTTMGR_IDItems(_npc);
}
}
me.Cancel(1);
}
}
}
}
function NTTMGR_VisitHalbu()
{
var _npc;
NTTM_TownMove("halbu");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_HALBU, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc))
NTT_RepairItems(_npc);
me.Cancel(1);
}
}
}
function NTTMGR_VisitTyrael()
{
var _npc;
NTTM_TownMove("tyrael");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_TYRAEL_ACT_4, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
NTT_ReviveMerc();
me.Cancel(1);
if(NTConfig_ResetWeapon)
NTT_ResetWeaponMerc();
}
}
}
function NTTMGR_VisitMalah()
{
var _npc;
NTTM_TownMove("malah");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_MALAH, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(_NTTMGR_BuyPots || _NTTMGR_BuyTP || _NTTMGR_BuyKey || _NTTMGR_DoID)
{
if(NTT_DoTrade(_npc))
{
if(_NTTMGR_BuyPots)
NTT_FillBelt(_npc);
if(_NTTMGR_BuyTP)
NTT_FillTome(_npc, 1);
if(_NTTMGR_BuyKey)
NTT_FillKey(_npc);
if(_NTTMGR_DoID)
NTTMGR_IDItems(_npc);
}
}
me.Cancel(1);
}
}
}
function NTTMGR_VisitLarzuk()
{
var _npc;
NTTM_TownMove("larzuk");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_LARZUK, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc))
NTT_RepairItems(_npc);
me.Cancel(1);
}
}
}
function NTTMGR_VisitQualKehk()
{
var _npc;
NTTM_TownMove("qual-kehk");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_QUALKEHK, 5);
if(_npc)
{
if(NTT_DoInteract(_npc))
{
NTT_ReviveMerc();
me.Cancel(1);
if(NTConfig_ResetWeapon)
NTT_ResetWeaponMerc();
}
}
}
function NTTMGR_VisitAnya()
{
var _npc;
NTTM_TownMove("anya");
_npc = NTC_FindUnit(NTC_UNIT_NPC, NTC_NPC_ID_ANYA_TOWN, 5);
if(_npc)
{
while(NTC_MyGold() > NTConfig_GambleStopGold)
{
if(NTT_DoInteract(_npc))
{
if(NTT_DoTrade(_npc, 1))
NTT_GambleIt(_npc);
me.Cancel(1);
}
else
break;
}
}
}
function NTTMGR_CheckScrolls(scrolltype)
{
var _tome = NTT_GetTome(scrolltype);
if(_tome)
return _tome.GetStat(70);
return 0;
}
function NTTMGR_CheckKeys()
{
var _key;
if(me.classid == NTC_CHAR_CLASS_ASSASSIN)
return 12;
_key = NTT_GetKey();
if(_key)
return _key.GetStat(70);
return 0;
}
function NTTMGR_IDItems(npc)
{
Include("libs/common/NTItemlogger.ntl");
var _tome, _scroll;
var _result;
var _items = NTT_GetUnidItems();
if(!_items || _items.length < 1)
return;
_tome = NTT_GetTome();
if(_tome && _tome.GetStat(70) < _items.length)
NTT_FillTome(npc);
for(var i = 0 ; i < _items.length ; i++)
{
var _isEthereal = ((_items[i].itemflag & 0x400000) == 0x400000) ? 1 : 0;
switch(NTSI_CheckItem(_items[i]))
{
case 1:
if(NTConfig_UseXMLItemlog)
{
if(NTI_WriteLog(_items[i], me, _isEthereal, 0))
{
NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _items[i].itemdesc + "\nÿc5Item Level: " + _items[i].itemlevel);
[COLOR="Red"]Say("/f m Just found " + _items[i].name + " at " + NTI_ReadLoc() + "!");[/COLOR]
}
}
else
{
NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _items[i].itemdesc + "\nÿc5Item Level: " + _items[i].itemlevel);
[COLOR="Red"]Say("/f m Just found " + _items[i].name + " at " + NTI_ReadLoc() + "!");[/COLOR]
}
case 2:
break;
case -1:
if(_tome)
_result = NTT_IdItem(_tome, _items[i]);
else
{
_scroll = NTT_GetScroll();
if(!_scroll)
{
NTT_BuyScrolls(npc);
_scroll = NTT_GetScroll();
}
_result = NTT_IdItem(_scroll, _items[i]);
}
if(_result)
{
switch(NTSI_CheckItem(_items[i]))
{
case 1:
if(NTConfig_UseXMLItemlog)
{
if(NTI_WriteLog(_items[i], me, _isEthereal, 0))
{
NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _items[i].itemdesc + "\nÿc5Item Level: " + _items[i].itemlevel);
[COLOR="Red"]Say("/f m Just found " + _items[i].name + " at " + NTI_ReadLoc() + "!");[/COLOR]
}
}
else
{
NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _items[i].itemdesc + "\nÿc5Item Level: " + _items[i].itemlevel);
[COLOR="Red"] Say("/f m Just found " + _items[i].name + " at " + NTI_ReadLoc() + "!");[/COLOR]
}
case 2:
break;
default:
if(NTConfig_UseXMLItemlog)
NTI_WriteLog(_items[i], me, _isEthereal, 1);
if(NTConfig_LogSoldItems)
NTC_SendLogToOOG(NTC_LOG_ITEM, "Sold " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _items[i].itemdesc + "\nÿc5Item Level: " + _items[i].itemlevel);
NTT_ShopItem(_items[i], npc, 1);
break;
}
}
else
{
if(NTConfig_UseXMLItemlog)
NTI_WriteLog(_items[i], me, _isEthereal, 1);
if(NTConfig_LogSoldItems)
NTC_SendLogToOOG(NTC_LOG_ITEM, "Sold " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + " ÿc6(" + NTI_ReadLoc() + ")" + ";" + _items[i].itemdesc + "\nÿc5Item Level: " + _items[i].itemlevel);
NTT_ShopItem(_items[i], npc, 1);
}
break;
}
}
}
// mask - 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
function NTTMGR_CheckCurse(selfmask, mercmask)
{
if(selfmask > 0x01)
{
if((selfmask&0x02) && me.GetState(2))
return true;
if((selfmask&0x04) && me.GetState(9))
return true;
if((selfmask&0x08) && me.GetState(19))
return true;
if((selfmask&0x10) && me.GetState(55))
return true;
if((selfmask&0x20) && me.GetState(60))
return true;
if((selfmask&0x40) && me.GetState(61))
return true;
}
if(mercmask > 0x01)
{
var _merc = NTC_GetMerc();
if(_merc)
{
if((mercmask&0x02) && _merc.GetState(2))
return true;
if((mercmask&0x04) && _merc.GetState(9))
return true;
if((mercmask&0x08) && _merc.GetState(19))
return true;
if((mercmask&0x10) && _merc.GetState(55))
return true;
if((mercmask&0x20) && _merc.GetState(60))
return true;
if((mercmask&0x40) && _merc.GetState(61))
return true;
}
}
return false;
}
// self - 0x01 : Potion
// merc - 0x01 : Death
// common - 0x02 : Poison, 0x04 : Amplify Damage, 0x08 : Weaken, 0x10 : Iron Maiden, 0x20 : Decrepify, 0x40 : Lower Resist
function NTTMGR_CheckSafe(selfmask, mercmask)
{
if(((selfmask&0x01) && NTT_CheckBelt()) || ((mercmask&0x01) && NTT_CheckMerc()) || NTTMGR_CheckCurse(selfmask, mercmask))
return NTTMGR_VisitTown();
return true;
}
Zeilen wurden rot hervorgehoben.
Ich find´s immerwieder lustig, wenn meine f-list sowas wie : "Just found Ist Rune at Tower Cellar Level 5" und 9 mins später "Just found Lo Rune at Durance of Hate Level 3" liest
Ich würd mir sowas mit ner Variablen in der Charconfig vorstellen können.
Nojo, nur so ´ne Idee, falls du zu wenig Prüfungen schreiben solltest
Btw., go Muddy, go Muddy!
Don Greetings,
Zerker.jar
Edit: Das ist der "Juhu, hab´ auch ´ne Idee, wenn auch nicht so Burner" - Blues.... :P
|
|
|
01/19/2011, 21:54
|
#577
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Latein...Das musste ich mir auch mal antun, auch wenn wir uns früher mehr mit geschicktem Bescheissen durchgemogelt haben.
Das ist eine Version von mir?
Wenn ja, von wann ist die?
Das ist irgendwie alles so suboptimal...
Was sich übrigens nicht auf deine Änderungen bezieht, mehr auf die Algorithmen im allgemeinen, weil ich dort irgendwie furchtbar viele Dinge sehe, die ich schon vor Monaten sehr viel besser umgesetzt habe.
Um nochmal auf die Änderungen zurückzukommen:
Also mich würde das extrem nerven. 
Aber ich denke das ist Geschmackssache, wer es haben mag, kann ja deiner Anleitung folgen.
Aber auf jeden Fall nur die Ausgaben hinzufügen und nicht diese doofen alten Funktionen kopieren.
Lg
Muddy
P.S.: Remember: most blues start with "I woke up this morning". 
You might wanna check out  which becomes considerably more funny the more you are into blues.
|
|
|
01/20/2011, 05:37
|
#578
|
elite*gold: 0
Join Date: Nov 2010
Posts: 605
Received Thanks: 109
|
danke muddy,zwischenespeichert hab ichs nicht aber die orginale rar datei hab ich immer in in einem ordner.es klappt alles wunderbar und er nimmt jetzt die pike zum killen(412ed 12ll botd eth warpike geht um das doppelte schneller).  lg loki
|
|
|
01/20/2011, 17:15
|
#579
|
elite*gold: 81
Join Date: Apr 2009
Posts: 832
Received Thanks: 53
|
Wie genau funktioniert das mit dem games ansagen , wenn ich z.b. op pornobaal joine und er nach dem ersten game immer das weitere ansagen soll was genau muss ich dort eintragen in der Config??
|
|
|
01/20/2011, 18:32
|
#580
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by Necro19
Wie genau funktioniert das mit dem games ansagen , wenn ich z.b. op pornobaal joine und er nach dem ersten game immer das weitere ansagen soll was genau muss ich dort eintragen in der Config??
|
Config? Das stellst du im Entry Point ein, sprich NTBot.ntj, nicht in der Charconfig.
Was wo hingehört geht eigentlich gut aus Variablenbezeichnern und Kommentaren hervor.
Wichtig ist, dass du deinen Char- oder Accountnamen in das dafür vorgesehene Array namens ChannelUsers einfügst. Nur Chars die auf diese Weise "registiert" sind, machen auch Ausgaben im Chat.
Dass das funktioniert hat siehst du am Statustextbalken, wenn du gerade den Chat betreten hast. Dort sollte "Chat actions enabled" in grün stehen, dann wird dein Char Ausgaben im Chat machen.
Was ausgegeben werden soll kannst du dabei frei wählen, wobei einige Platzhalter zur Verfügung stehen, die automatisch durch die passenden Werte (also Spielname, Zeit bis zur Erstellung, etc.) ersetzt werden.
Auch das steht aber nochmal in den Kommentaren.
Lies dir diese erstmal in Ruhe durch und frag dann gegebenenfalls etwas konkreter, sollten dabei wider erwarten Fragen offen bleiben.
Lg
Muddy
|
|
|
01/20/2011, 22:22
|
#581
|
elite*gold: 81
Join Date: Apr 2009
Posts: 832
Received Thanks: 53
|
Tja... trotzdem weiß ich immer noch nicht wie ich es abändern muss , damit er immer fortlaufend das game ankündigt im channel... ich benutze übringens nicht deine d2nt version sondern die normale d2nt 3.1
|
|
|
01/20/2011, 22:45
|
#582
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by Necro19
Tja... trotzdem weiß ich immer noch nicht wie ich es abändern muss , damit er immer fortlaufend das game ankündigt im channel... ich benutze übringens nicht deine d2nt version sondern die normale d2nt 3.1
|
Och mensch...
Ich bin eigentlich sehr für eigenständiges Mitdenken und daher weder für Bildchenguides, noch für das Vorkauen von Anweisungen, die an anderer Stelle bereits erklärt werden.
Insofern läuft diese Hilfestellung jetzt als Ausnahme, zumal es noch nichtmal meine Version ist. 
Ich poste mal den Beginn der NTBot.ntj und hebe dir die nötigen Änderungen entsprechend hervor:
Code:
/**
* This file was modified by
* Check the programming section for updates and further scripts
* Last Update: 01/19/2011
*/
var GameMinLength = 120000; // time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)
var UnableToConnectRetry = 5; // time in minutes to retry connecting on connection fail (real value is +/- 1 min)
var RealmDownRetry = 15; // time in minutes to retry connecting on a realm down (default is 300 minutes)
var DisconnectedRetry = 5; // time in minutes to retry on a disconnection (usually ip ban related)
var CdKeyInUseRetry = 5; // time in minutes to retry on a cdkey in use error message (set to 0 to stop)
var ConnectingToBnetTimeout = 20000; // time in milliseconds to wait for a login to time out and click cancel and retry
var CharacterScreenTimeout = 10000; // time in milliseconds to wait for character screen to appear
var PleaseWaitTimeout = 10000; // time in milliseconds to wait for a please wait popup
var CreateGameThreshold = 20000; // time in milliseconds to wait between making games
var CreateGameThresholdRandom = 5000; // time in milliseconds to randomly add +/- to the game create time
var CreateGameTimeout = 15000; // time in milliseconds to register a failed to create game
var WaitInLineTimeout = 60000; // time in milliseconds to wait in lines for a create game (60 second default)
var CharacterSelectDelay = 1000; // time in milliseconds to wait before selecting a character on the char screen
var LoginDelay = 1000; // time in milliseconds to wait before submitting login information
var ClickDelay = 1000; // wait X milliseconds before next action after a click event
var TextDelay = 1000; // wait X milliseconds before next action after inserting text into a textbox
var ClickDelayRandom = 500; // random amount of time to add to a click
var TextDelayRandom = 500; // random amount of time to add to a text set
var GameDoesNotExistDelayMin = 600000; // how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
var GameDoesNotExistDelayMax = 900000; // how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
var GameDoesNotExistTimeout = 30000; // how long to wait for the dialog to disappear (default 30 seconds, don't change this)
var JoinChatAfterLogin = true; // join chat after login
var JoinRandomChannel = false; // if this is true, will join a random channel, otherwise it will use the channel below..
var JoinChannelInChat = "[COLOR=Red]OP Necro19[/COLOR]"; // leave blank not to join a private channel
var PerformChannelLogin = false; // type ".login" once after joining the channel
var ChannelUsers = new Array(); // dynamic array that holds channel users
var MaximumLocationLoops = 10; // the maximum number of loops for a single location; if this number is exceeds, the window is restarted
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// Add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
ChannelUsers.push("[COLOR=Red]IAmNecro19'sAwesomeCharName[/COLOR]");
// Or
ChannelUsers.push("[COLOR=Red]IAmNecro19'sAwesomeAccountName[/COLOR]");
// The following key expressions will be replaced by their actual values: %game --> "gamename-" <> %counter --> number of the next game <> %time --> time in seconds till game creation <> %password --> game password
// Note that the announcement will start after the first run, so there usually won't be any anncouncement right after login - If the gamename is undefined, the bot will try to load the backup file to announce the upcoming game properly
var GameAnnouncement = "[COLOR=Red]I am a magnificent announcement! Creating %game%counter//%password in %time seconds...[/COLOR]"; // Leave blank not to post a channel announcement
var GameAnnouncementDelay = 5000; // Wait X milliseconds before posting the announcement message (don't set this too low!)
var GameAnnouncementDelayRandom = 500; // Random amount of time to add to a to the announcement delay
var UseFileBackupTimeMax = 15; // Time in minutes that may pass since last file update - The backup File is updated at the beginning of every single game and is read everytime the name of your previous game is undefined (e.g. at restarts); Set to 0 to deactivate file backup
//----------------------------------------------------------------------------------------------------------------------------------------------------------
var WaitBeforeEnterChatMin = 1000; // min how long to wait before entering chat
var WaitBeforeEnterChatMax = 2000; // max how long to wait before entering chat
var WaitInChatBeforeActionsMin = 2000; // min how long to wait before joining channel
var WaitInChatBeforeActionsMax = 3000; // max how long to wait before joining channel
// DONT EDIT ANYTHING BELOW THIS
// D2NT Manager Command
const D2NT_MGR_LOADING = 1;
const D2NT_MGR_READY = 2;
const D2NT_MGR_LOGIN = 3;
const D2NT_MGR_CREATE_GAME = 4;
const D2NT_MGR_INGAME = 5;
const D2NT_MGR_RESTART = 6;
const D2NT_MGR_CHICKEN = 7;
const D2NT_MGR_PRINT_STATUS = 8;
const D2NT_MGR_PRINT_LOG = 9;
var LastGameMade = GetTickCount();
var LastGameStatus = 0;
var NextGameMake = 0;
var InGameAt = 0;
var LocationLoops = new Array(2);
var ChatActionsDone = false;
var LastGameFailed = false;
var JoinedChannel = false;
var JustJoined = true;
Include("libs/controlInfo.ntl");
var ControlData = new controlInfo();
function NTMain()
{
Delay(1000);
var _ingame = false;
ControlData.ClickDelay = ClickDelay;
ControlData.TextDelay = TextDelay;
ControlData.ClickDelayRandom = ClickDelayRandom;
ControlData.TextDelayRandom = TextDelayRandom;
while(1)
{
if(me.ingame)
{
if(!InGameAt)
InGameAt = GetTickCount();
if(!_ingame)
{
RunGC(); // run garbage collector between each game
if(me.gamename)
MW_WriteBackupFile(me.gamename);
if(Load("[COLOR=Red]NTBot/NTBotGame.ntj[/COLOR]"))
{
_ingame = true;
LocationLoops[1] = 0;
if(me.playtype > 0)
NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game [IP:" + me.gameserverip.split(".")[3] + "]", 0);
else
NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
LastGameStatus = 2; // in game successful
}
}
Delay(1000);
}
else
{
if(_ingame)
{
_ingame = false;
NT_SendEventToOOG(D2NT_MGR_READY, "", 0);
}
NT_LocationAction(ControlData.getLocation());
Delay(500);
}
}
}
War das jetzt so schwer?
Lg
Muddy
|
|
|
01/20/2011, 23:23
|
#583
|
elite*gold: 81
Join Date: Apr 2009
Posts: 832
Received Thanks: 53
|
Ok jetzt gehts , aber er postet es jetzt 2 mal im chat, wie stell ich um das er nur einmal sagt z.b. diabaalsx-01 in 10 seconds?
|
|
|
01/21/2011, 14:55
|
#584
|
elite*gold: 0
Join Date: Nov 2010
Posts: 6
Received Thanks: 0
|
Quote:
Originally Posted by Muddy_Waters
Das siehst du falsch, ein Restart kann immer auftreten, wenn es zu einem unbehandelten Ausnahmefehler kommt.
Völlig entgegen dem Sinn und Zweck von Ausnahmefehlern, ist es in diesen Fällen leider meist absolut unsicher, was genau das Problem ist, es sei denn man kennt die Rahmenbedingungen und schafft es den Fehler zu reproduzieren. In dem Fall weiss man, wo man zu suchen hat.
Ich habe das Problem beispielsweise mit meinem MF Barb, die Restartquote liegt hier etwa um den Faktor 4 höher als bei meinen anderen Chars.
Leider weiss ich bislang noch nicht genau, was Auslöser dieser Restarts ist.
Darum erstmal die Frage: Welchen Char verwendest du und wo treibt dieser sich in erster Linie rum?
Lg
Muddy
|
Blitz/Kettenblitzzauberin,
Code:
MWConfig_Script.push(["NTCountess.ntj", 10]); MWConfig_ClearCountessRooms = false;
MWConfig_Script.push(["NTNihlathak.ntj", 10]); NTConfig_PindleskinExtension = true; MWConfig_SkipOnTombVipers = true;
MWConfig_Script.push(["NTSummoner.ntj", 10]); NTConfig_KillFireEye = true;
MWConfig_Script.push(["NTAndariel.ntj", 10]);
MWConfig_Script.push(["NTMephisto.ntj", 10]); MWConfig_OpenMephistoChest = true; MWConfig_MephistoClearArea = false;
MWConfig_Script.push(["MWSewers.ntj", 10]);
MWConfig_Script.push(["NTPit.ntj", 10]); MWConfig_ClearPathToPit = false; NTConfig_ClearPitLevel1 = 2; // 0 : don't clear, 1 : clear path only, 2 : clear all
MWConfig_Script.push(["NTDuriel.ntj", 10]); MWConfig_ClearPathToDuriel = true;
MWConfig_Script.push(["NTGlacialTrail.ntj", 10]); NTConfig_ClearGlacialTrail = true;
//MWConfig_Script.push(["NTCows.ntj", 20]);
//MWConfig_Script.push(["NTDiablo.ntj", 10]); MWConfig_StartAtStar = true; // false: start at entrance, true: start at star
MWConfig_Script.push(["NTBaal.ntj", 10]); NTConfig_KillBaal = true; MWConfig_SkipBaalOnDolls = true; MWConfig_SkipBaalOnSouls = false;
//MWConfig_Script.push(["MWWorldstoneKeep.ntj", 10]); MWConfig_SkipLevelOnWitches = true; MWConfig_SkipLevelOnSouls = true; MWConfig_SkipLevelOnDeathLords = true;
Cows, Dia und WSK auskommentiert weil ich das Gefühl hatte dass es tendenziell bei den Runs öfter passiert. War aber ne Fehleinschätzung scheinbar
|
|
|
01/21/2011, 16:47
|
#585
|
Administrator
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,727
Received Thanks: 12,652
|
Quote:
Originally Posted by Necro19
Ok jetzt gehts , aber er postet es jetzt 2 mal im chat, wie stell ich um das er nur einmal sagt z.b. diabaalsx-01 in 10 seconds?
|
Das sollte er eigentlich auch so tun, auch wenn ich zugeben muss, das lange nicht mehr getestet zu haben.
Stell mal sicher, dass die Delays sinnvoll gewählt sind, dann sollte das eigentlich funktionieren. Ansonsten schreib ich schnell einen workaround, allerdings nur, wenn meine Tests zu ähnlichen Problemen führen.
Quote:
Originally Posted by Greekgod
Blitz/Kettenblitzzauberin,
Code:
MWConfig_Script.push(["NTCountess.ntj", 10]); MWConfig_ClearCountessRooms = false;
MWConfig_Script.push(["NTNihlathak.ntj", 10]); NTConfig_PindleskinExtension = true; MWConfig_SkipOnTombVipers = true;
MWConfig_Script.push(["NTSummoner.ntj", 10]); NTConfig_KillFireEye = true;
MWConfig_Script.push(["NTAndariel.ntj", 10]);
MWConfig_Script.push(["NTMephisto.ntj", 10]); MWConfig_OpenMephistoChest = true; MWConfig_MephistoClearArea = false;
MWConfig_Script.push(["MWSewers.ntj", 10]);
MWConfig_Script.push(["NTPit.ntj", 10]); MWConfig_ClearPathToPit = false; NTConfig_ClearPitLevel1 = 2; // 0 : don't clear, 1 : clear path only, 2 : clear all
MWConfig_Script.push(["NTDuriel.ntj", 10]); MWConfig_ClearPathToDuriel = true;
MWConfig_Script.push(["NTGlacialTrail.ntj", 10]); NTConfig_ClearGlacialTrail = true;
//MWConfig_Script.push(["NTCows.ntj", 20]);
//MWConfig_Script.push(["NTDiablo.ntj", 10]); MWConfig_StartAtStar = true; // false: start at entrance, true: start at star
MWConfig_Script.push(["NTBaal.ntj", 10]); NTConfig_KillBaal = true; MWConfig_SkipBaalOnDolls = true; MWConfig_SkipBaalOnSouls = false;
//MWConfig_Script.push(["MWWorldstoneKeep.ntj", 10]); MWConfig_SkipLevelOnWitches = true; MWConfig_SkipLevelOnSouls = true; MWConfig_SkipLevelOnDeathLords = true;
Cows, Dia und WSK auskommentiert weil ich das Gefühl hatte dass es tendenziell bei den Runs öfter passiert. War aber ne Fehleinschätzung scheinbar 
|
Also mit meiner laufenden Version lag ich gestern bei Orb/FB Sorc, 2xHammerdin und Summoner bei ~2 Restarts auf 30 Runs, wobei ein Spiel ~40Minuten dauert.
Insofern würde ich ausschließen, dass hier irgendwelche systematischen Fehler vorliegen, die eine erhöhte Restart Quote zur Folge haben - jedenfalls was meine laufende Version angeht, die natürlich schon wieder etwas weiter ist, als die veröffentlichte.
Nur bei meinem MF Barb habe ich noch massive Probleme mit Restarts.
Das waren gestern ~18 Restarts auf gut 30 Spiele, wobei auch hier ein Spiel 40-45Minuten dauert.
Das ist definitiv viel zu viel. Dummerweise konnte ich aber die Ursache noch nicht ermitteln, auch wenn ich die betroffenen Funktionen schon weiter optimiert habe, um beispielsweise den Zugriff auf undefinierte Objekte zu verhindern (letzteres hat immer einen Ausnahmefehler zur Folge).
Hättest du also einen Barb, wäre das Problem aus meiner Sicht nachvollziehbar gewesen. So ist es eher schwierig...
Kontrollier mal sicherheitshalber deine Char Config auf kleinere Syntaxfehler.
So Dinge wie vergessene Semikola haben gerne zur Folge, dass die Restartquote stark ansteigt.
Ansonsten bin auch leider auch etwas überfragt, würde allerdings eher nicht vermuten, dass einzelne Botskripte dies auslösen, es sei denn sie sind schlampig geschrieben und enthalten ebenfalls kleinere Syntaxfehler.
Lg
Muddy
|
|
|
 |
|
Similar Threads
|
[Release] D2NT 3.1 1.13c
07/17/2016 - Diablo 2 - 91 Replies
hi,
hab eben den d2nt3.1 gefunden. ein neues baba script is dabei.
release thread eon
D2NT3.1
|
[Realease] Muddy's Waypoint Catcher
08/21/2013 - Diablo 2 Programming - 46 Replies
Moin zusammen,
hier mal die erste Release Version eines kleinen Scripts genannt Waypoint Catcher. Das ganze ist jetzt nichtmal 24h alt, dementsprechend sind vermutlich noch einige Bugs vorhanden. Hinweise dazu nehme ich gerne entgegen. ;)
Features:
- Suchen sämtlicher Wegpunkte mit Ausnahme, wobei in Akt ein durch Probleme im Jail Bereich nach dem Wegpunkt Outer Cloister abgebrochen wird
- Wahlweise auch mit TP an jedem gefundenen Wp, sodass man damit auch anderen (nicht-Bots) die...
|
[D2NT] Long Dia Release
05/10/2011 - Diablo 2 Programming - 28 Replies
Ein kleines Script für diablo, es startet beim eingang macht ein tp cleart den weg zum star macht am star noch ein tp dann läufts wie das normale nur cleart es schöner :)
hoffe euch gefällts ich habs noch nicht wirklich getestet (2-3 runs) bugs können gerne hier gepostet werden verbesserungs vorschläge auch :D
installation:
1.)Script in den Bot ordner kopieren
2.)Script im editor oder vergleichbaren öffnen
3.) Msg´s anpassen (ist nicht schwer)
4.) in der char config die zeile...
|
D2NT 3.0 Pickit release
10/22/2010 - Diablo 2 - 77 Replies
edit
|
Muddy's D2NT Help
07/29/2010 - Diablo 2 - 3 Replies
hi i just started to use the bot it work's great.
how do i set up the skill's i use on my Sorc and pick up itme's?
.....
if you reply to this post please use english
|
All times are GMT +1. The time now is 15:53.
|
|