[D2NT] 3.1 Problem mit GetState(30)

08/26/2010 12:48 SpotHot#1
Hi,

Hat noch jemand Probleme mit "me.GetState(30)", die Funktion scheint immer False zuliefern. Benutze den D2NT 3.1 ungemodded. Gibt's dafür einen Patch, oder tritt das Problem bei euch überhaupt nicht auf?

PS:
Ja, auch wenn Energy Shield gecastet wurde.;)

MfG SpotHot
08/26/2010 17:32 SpotHot#2
So habe jetzt Bluebird, Muddy's und Sternenlooper's getestet, überall gibt "GetState(30)" immer false zurück. Hab dafür erstmal ein Workaround geschrieben, bis jemand den Fehler bestätigt oder eben nicht.

Habe folgendes in der NTPrecast.ntl hinzugefügt.
Code:
var _NTP_HaveCTA = -1;

[COLOR="Red"]//--- STATE 30 always False Bug workaround
// Energy Shield at Level 1
// Duration: 144 seconds.
const _NTP_STATE30_REFRESH_RATE = 144000; //time in milliseconds
var LastState30Refresh = GetTickCount();
//workaround end ---[/COLOR]

function NTP_DoPrecastCTA(refresh)
{ ...}
Und in der Funktion NTPrecast.ntl->NTP_DoPrecast
Code:
function NTP_DoPrecast(refresh)
{
   ...
   case NTC_CHAR_CLASS_SORCERESS:
   ...
   //if(refresh || !me.GetState(30))
   //	NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield

[COLOR="Red"]   //--- STATE 30 always False Bug workaround
   deltaTime = GetTickCount() - LastState30Refresh; 
		
   if(refresh || (deltaTime > _NTP_STATE30_REFRESH_RATE))
   {
	NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield
	LastState30Refresh = GetTickCount();
   }
   //workaround end ---[/COLOR]
   ...
}
Bin aber immernoch an einer Antwort interessiert, ob andere dieses Problem auch haben.

MfG SpotHot
08/26/2010 18:55 Muddy Waters#3
Quote:
Originally Posted by SpotHot View Post
So habe jetzt Bluebird, Muddy's und Sternenlooper's getestet, überall gibt "GetState(30)" immer false zurück. Hab dafür erstmal ein Workaround geschrieben, bis jemand den Fehler bestätigt oder eben nicht.

Habe folgendes in der NTPrecast.ntl hinzugefügt.
Code:
var _NTP_HaveCTA = -1;

[COLOR=Red]//--- STATE 30 always False Bug workaround
// Energy Shield at Level 1
// Duration: 144 seconds.
const _NTP_STATE30_REFRESH_RATE = 14400; //time in milliseconds
var lastState30Refresh = 0;
//workaround end ---[/COLOR]

function NTP_DoPrecastCTA(refresh)
{ ...}
Und in der Funktion NTPrecast.ntl->NTP_DoPrecast
Code:
function NTP_DoPrecast(refresh)
{
   ...
   case NTC_CHAR_CLASS_SORCERESS:
   ...
   //if(refresh || !me.GetState(30))
   //    NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield

[COLOR=Red]   //--- STATE 30 always False Bug workaround
   deltaTime = GetTickCount() - lastState30Refresh; 
        
   if(refresh || (deltaTime > _NTP_STATE30_REFRESH_RATE))
   {
    NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield
    lastState30Refresh = GetTickCount();
   }
   //workaround end ---
   ...
}[/COLOR]
Bin aber immernoch an einer Antwort interessiert, ob andere dieses Problem auch haben.

MfG SpotHot
Das wird auch bei allen Versionen gleich sein, da alle auf der originalen, unveränderten D2NT Core beruhen.
Mit einem Patch konkret dafür würde ich daher auch nicht rechnen. ;)

Ich kanns leider nicht nachvollziehen, da es mir an einer Sorc mit ES fehlt, aber wenn du sagst dass dem so ist, wüsste ich nicht was mich davon abhalten sollte, dir einfach mal zu glauben. :)

Achja, wenn die Variable, die du dort eingeführt hast global sein soll (was anders auch keinen Sinn ergeben würde), dann schreibe sie doch am Anfang Groß. Das ist für D2NT gängiger standard und so weiss jeder sofort, wo die Variable gültig ist.

Lg
Muddy
08/26/2010 20:22 SpotHot#4
Danke, für den Hinweis zur D2NT Stylekonvention, habs auch gleich einmal korrigiert.
Zum Problem, konnte es mittlerweile, mit gleichen Ergebnis, an mehreren verschiedenen Rechnern und D2-Installationen testen.

Der Form zur Liebe, noch kurz eine Erklärung wie sich der Fehler auswirkt und wann er Auftritt.

betroffener Charakter
Zauberin mit Mana-Schild

beteiligte Funktionen
NTA_ClearLevel()->NTP_DoPrecast()

betroffene Codestelle:
Code:
[COLOR="Red"]if(refresh || !me.GetState(30))
	NTC_CastSkill(58, NTC_HAND_RIGHT); // Energy Shield[/COLOR]
Auswirkung:
Nach jedem Teleport wird das Mana-Schild neu gecastet. Hat zur Folge, dass mehr Zeit verbraucht wird,
als Nötig um ein Gebiet zu säubern. Je nachdem kann sich die Gamezeit um einige Minuten erhöhen
oder man schafft nicht alle Gebiete in der vorhergesehenden Zeit.

- SpotHot
09/14/2010 21:27 bishibosh#5
Quote:
Originally Posted by SpotHot View Post
Hat noch jemand Probleme mit "me.GetState(30)", die Funktion scheint immer False zuliefern. Benutze den D2NT 3.1 ungemodded. Gibt's dafür einen Patch, oder tritt das Problem bei euch überhaupt nicht auf?
Habe exakt das gleiche Problem, alle 2 Teleports macht meine Sorc den ES neu :-(

me.GetState(30) gibt in diesen Fällen übrigens einen nicht definierten Wert zurück, woran auch immer das liegen mag.