Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 01:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



mob killreihenfolge festlegen

Discussion on mob killreihenfolge festlegen within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old 07/31/2010, 05:54   #16
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by fuuch View Post
danke das du dir die zeit nimmst, dich damit zu befassen muddy
Da nicht für.

Ich finde es eigentlich schade, dass es nicht mehr solche topics in der Programming Sektion gibt. Das meiste sind immer nur grobe Anfragen á la "ich möchte ein Script, welches dies und das macht, wie mache ich das?", wobei dann nach Möglichkeit schon direkt das fertige Script erwartet wird.

Sowas hier ist da etwas anders, weil du dir selber Gedanken machst, eigene Ansätze schreibst und dann wirklich etwas zur Programmierung selbst fragst.
Ich jedenfalls werde bei sowas immer gerne antworten, sofern es mein Wissen zulässt.

Lg
Muddy
Muddy Waters is offline  
Old 07/31/2010, 10:43   #17
 
elite*gold: 0
Join Date: Jul 2008
Posts: 169
Received Thanks: 14
irgendwo ist noch eine endlosloop drin, glaube ich.
bot portet zu baal runter und direkt nachdem er den thronsaal betritt fängt das spiel an immer stärker zu ruckeln bis eine exception kommt und das game crasht.
fuuch is offline  
Old 08/02/2010, 16:19   #18
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by fuuch View Post
irgendwo ist noch eine endlosloop drin, glaube ich.
bot portet zu baal runter und direkt nachdem er den thronsaal betritt fängt das spiel an immer stärker zu ruckeln bis eine exception kommt und das game crasht.
Ich hatte da in der Tat etwas gepfuscht, das kommt davon, wenn man nicht in Ruhe arbeitet und zudem noch viel kopiert.

Einige kleinere Fehler, sowie die völlig falsche Verwendung der Zählvariablen i zum Durchlaufen des Arrays, obwohl dieser Bezeichner in diesem Geltungsbereich schon für die äußere (spectype) Zählschleife vergeben war.
Letzteres verursachte, wie du schon richtig vermutet hattest, eine Endlosschleife...

Versuch mal die aufgeräumte Variante:
Code:
function NTA_ClearPosition(range, pickitem, safelevel)
{
    var _orgx, _orgy;
    var _spectype = [0x0A, 0x01, 0x01];
    var _skiplist;
    var _attackcount = 0;
    var _target;
    var _distance, _mingid, _mindistance;
    var _result;
    var _monsters, _newMonster;
    var  _mingidRes, _mindistRes, _tempTarget;
    var _ignoreSpectype = false;
        
    if(NTConfig_AttackSkill[1] < 1 || NTConfig_AttackSkill[3] < 1)
        return false;

    switch(arguments.length)
    {
    case 0:
        range = 20;
    case 1:
        pickitem = false;
    case 2:
        safelevel = 0;
    default:
        if(NTConfig_CheckSelfSafe < 0x01 && NTConfig_CheckMercSafe < 0x01)
            safelevel = 0;
        break;
    }

    _orgx = me.x;
    _orgy = me.y;

    for(var i = 0 ; i < _spectype.length ; i++)
    {
        _skiplist = new Array();

        while(_attackcount < (i+1)*100)
        {
            _mindistance = 1E5;

            _target = NTC_FindUnit(NTC_UNIT_MONSTER);
            
            _monsters = new Array();

            if(_target)
            {
                do
                {
                    if(_skiplist.indexOf(_target.gid) < 0)
                    {
                        if(_target.IsAttackable() && ((_ignoreSpectype)?true:(_target.spectype&_spectype[i])))
                        {
                            if(GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTA_IsValidMonster(_target))
                            {
                                _distance = GetDistance(me, _target);

                                if(_distance < _mindistance)
                                {
                                    _mingid = _target.gid;
                                    _mindistance = _distance;
                                }
                                
                                _newMonster = new MonsterData(_mingid, NTA_GetResistance(_target, NTA_DAMAGE_FIRE), NTA_GetResistance(_target, NTA_DAMAGE_COLD), NTA_GetResistance(_target, NTA_DAMAGE_LIGHTNING), NTA_GetResistance(_target, NTA_DAMAGE_POISON), NTA_GetResistance(_target, NTA_DAMAGE_PHYSICAL), NTA_GetResistance(_target, NTA_DAMAGE_MAGIC));
                                
                                if(_newMonster)
                                    _monsters.push(_newMonster);
                            }
                        }
                        else
                            _skiplist.push(_target.gid);
                    }
                } while(_target.GetNext());
            }
            
            _monsters.sort(MW_SortByResistance);
            
            _mingidRes = 0;
            _mindistRes = 1E6;
            _tempTarget;
           
            for(var k = 0; k < _monsters.length; k++)
            {
                  _tempTarget = NTC_FindUnit(NTC_UNIT_MONSTER, _monsters[k].gid);
                
                if(_tempTarget)
                {
                    if(k > 0 && _monsters[k].res.phys != _monsters[k-1].res.phys)
                        break;
                    
                    /* Alternativ: Nicht niedrigste Resistenz prüfen, sondern nächstes Monster angreifen, das nicht immun ist
                    if(i > 0 && _monsters[k].res.phys > 99)
                        break;
                    */
                    
                    _distance = GetDistance(me, _tempTarget);
                    
                    if(_distance < _mindistRes)
                    {
                        _mingidRes = _tempTarget.gid;
                        _mindistRes = _distance;
                    }
                }
            }
           
            if(_mindistance < 1E5)
            {
                if(_monsters.length > 0)
                    _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingidRes);
                
                if(!_target)
                    _target = NTC_FindUnit(NTC_UNIT_MONSTER, _mingid);
                                
                if(_target)
                {
                    _result = NTA_Attack(_target, (_attackcount%30) == 0);

                    switch(_result)
                    {
                    case 1:
                        _skiplist.push(_mingid);
                        break;
                    case 2:
                    case 3:
                        if(NTConfig_PickItemsInstantly && (_target.hp <= 0 || _target.mode == 0 || _target.mode == 12))
                            NTSI_PickItems();
                        _attackcount++;
                        break;
                    default:
                        return false;
                    }
                }
            }
            else
                break;
        }
    }

    if(me.classid == NTC_CHAR_CLASS_PALADIN)
    {
        if(_attackcount > 2 && (parseInt(me.hp*100/me.hpmax) < NTConfig_UseRedemptionHP || parseInt(me.mp*100/me.mpmax) < NTConfig_UseRedemptionMP))
        {
            if(NTC_PutSkill(124, NTC_HAND_RIGHT))
                NTC_PingDelay(2000);
        }
    }
           
    if(NTConfig_OpenChest)
    {
        _target = NTC_GetSpecialChest();

        if(_target && GetDistance(_orgx, _orgy, _target.x, _target.y) <= range && NTC_OpenChest(_target))
            _attackcount++;
    }
    
    if(pickitem && _attackcount > 0)
        NTSI_PickItems();
        
    switch(safelevel)
    {
    case 1:
        return NTTMGR_CheckSafe(0x00, NTConfig_CheckMercSafe&0x01);
    case 2:
        return NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
    }

    return true;
}
Lg
Muddy
Muddy Waters is offline  
Old 08/02/2010, 22:20   #19
 
elite*gold: 0
Join Date: Jul 2008
Posts: 169
Received Thanks: 14
syntax stimmt soweit.
mir ist gerade aufgefallen, dass die botscripte die reihenfolge overriden
z.B.
Code:
NT_KillMonster(GetLocaleString(2851) (Vizier im diascript ist das)
wird ausgeführt, ohne das die reihenfolge überhaupt drankommt.
dies hat zur folge, dass der bot den named attackiert - komme was wolle.
fuuch is offline  
Old 08/03/2010, 14:56   #20
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by fuuch View Post
syntax stimmt soweit.
mir ist gerade aufgefallen, dass die botscripte die reihenfolge overriden
z.B.
Code:
NT_KillMonster(GetLocaleString(2851) (Vizier im diascript ist das)
wird ausgeführt, ohne das die reihenfolge überhaupt drankommt.
dies hat zur folge, dass der bot den named attackiert - komme was wolle.
Das sowieso, wobei ich ja auch schon zu obiger Funktion etwas in der Richtung angemerkt hatte:
Quote:
Originally Posted by Muddy_Waters View Post
Achja, es ist offensichtlich, dass der spectype hier ziemlich negativ reinfunkt, weil PI Bosse trotzdem immer zuerst angegriffen werden.
Für die Funktion könnte man es umgehen, indem man den spectype schlicht ignoriert, eine Variable dafür steckt schon in der letzten Version die ich gepostet habe.

Dein anderes Problem könnte man umgehen, indem man vor dem entsprechenden Monster einen Aufruf von NTA_ClearPosition() einfügt.
Eventuell könnte der Aufruf auch direkt innerhalb der Funktion NTA_KillMonster() auftauchen. Dann würde ich allerdings erstmal überprüfen, ob überhaupt andere Monster in der Nähe sind und die Funktion nur aufrufen, wenn dies auch der Fall ist.

Lg
Muddy
Muddy Waters is offline  
Old 08/11/2010, 00:09   #21
 
Diablofarmer's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 1,456
Received Thanks: 290
zeigs ihnen Muddy
Diablofarmer is offline  
Reply


Similar Threads Similar Threads
[V-Tut]Rates in der DB festlegen.
08/21/2010 - Metin2 PServer Guides & Strategies - 13 Replies
Hallo EPvPers,YouTube - Rates in der DB festlegen Das tut hab ich gerade für einen User aufgenommen, ich poste es schnell noch mal in der Section, damit man es auch leichter über die SuFu findet ;) MfG, Xel~
Fenstergröße festlegen
05/26/2010 - GW Bots - 1 Replies
Hallo, kann man mit einem au3 script die Größe vom Guild Wars Fenster festlegen lassen? Wenn ja wie? Danke
NPC Positionen festlegen
04/25/2010 - Metin2 Private Server - 4 Replies
hey also wie der name schon sag will ich gerne wissen wie man bei den npc eine bestimmte position festlegt bezogen auf den betrunkenen bürger ich will ihn nicht dumm rum gurken lassen weil er alle fbs in sich trägt un deshalb will ich ihn halt an eine bestimmte position stellen wäre nett wenn jemand ein tut hat oda so habe nämlich nichts gefunden!!! :D
value mit $_get festlegen
04/05/2010 - General Coding - 0 Replies
ich probiere grade ein vorher festgelegte get form ueber post zu uebermitteln meine idee war nun das <input type="hidden" name="hauptkate" value="<?php echo '$_GET'?> "> einzubauen in der post form und dies sollte dann als value den wert von choosekate nehmen
FPS festlegen?
07/11/2008 - Kal Online - 7 Replies
Hi, Wollte euch mal Fragen ob ihr wisst, wie ich die FPS in Kal auf eine bestimmte zahl fixen kann. Weil manchmal geht das auf 500+ und es ist Zeitlupe. Über nvidia ControlPanel hab ich bei der engine.exe vertikale Synchronisation eingestellt. Müsste als nicht über 60Hz gehen tuts aber dennoch. Kann man das noch irgendwie anders auf eine unkomplizierte Art lösen? MfG



All times are GMT +2. The time now is 01:12.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.