[Release] Range Hack Fix

11/03/2013 19:46 Swäg#1
I found this hack fix in my old source and im sharing it with you guys now.
Maybe some of you already got it, but it still might be usefull for some people.


Asal & HOP Range Fix:

Hawkeye Range Hack Fix:

Heal Asal/Skill Range Bug Fix:

To avoid Range Asals caused by position bugs or speed check this:
11/03/2013 19:51 Kabellutscher#2
Quote:
Asal & HOP Range Fix:
Daran sieht man wieder das du nix kannst.

Dazuwäre das nur ein Client Side Fix.

Quote:
Heal Asal/Skill Range Bug Fix:
Das ist klar wie man umgehen kann.

Quote:
To avoid Range Asals caused by position bugs or speed check this:
Entfernungen ändern dein ernst?
11/03/2013 19:55 Swäg#3
Quote:
Originally Posted by Kabellutscher View Post
Daran sieht man wieder das du nix kannst.

Dazuwäre das nur ein Client Side Fix.



Das ist klar wie man umgehen kann.



Entfernungen ändern dein ernst?

Ohh u mad bro?

[Only registered and activated users can see links. Click Here To Register...]


Hab nie behauptet was drauf zu haben mein freund :P

Es ist ein legitimer release threard und die fixes funktionieren.
Ich selbst schwöre auch auf andere Fix methoden, jedoch für leute mit wenig ahnung (siehe täglich neue 0815 GW Server) ist hier der ein oder andere fix vielleicht ganz nützlich.

Wenn dus scheisse findest dann release doch was besseres.
11/03/2013 19:55 Kabellutscher#4
Quote:
Originally Posted by Iban24 View Post
1. g_DPlay.SendHacking die Funktion gibt es nicht standartmäßig im FlyFF Source also muss die zeile raus.

2. Hier habt ihr einen Range Fix der ALLE Range Bugs/Hacks Fixt

In Ctrl.cpp

Vor:
Code:
		if( pSkillProp->dwID != SI_ACR_SUP_DARKILLUSION )
		{
			if( ((CMover *)pSrc)->HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) )
			{
				((CMover *)pSrc)->SetDarkCover( FALSE );
				((CMover *)pSrc)->RemoveBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION );		// ÇØÁ¦.
			}
		}
Dashier:

Code:
		D3DXVECTOR3 v3Len = GetPos() - pSrc->GetPos();
		FLOAT fTotalLen = D3DXVec3LengthSq( &v3Len );

		if( fTotalLen > ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange ) )
			return 0;
Das betrifft jeden Skill und nicht wie bei deinen billigen scheiß wo man jeden Skill abfragen muss.
Dasist mal ein Fix. Hast du es getestet?

@alle naps die das immer noch versuchen im client zu machen.

Lass es einfach und nehmt das. Es fehlt nur noch eine Abfrage beim der Sache wo die SFX erstellt wird.
11/03/2013 20:02 Iban24#5
Quote:
Es fehlt nur noch eine Abfrage beim der Sache wo die SFX erstellt wird.
Nop, guck dir mal die ganze DoApplySkillEx funktion an.

CreateSkillSfx( pTarget, pSkillProp, pAddSkillProp );
ist Client side und kommt nachdem der Worldserver die Range prüft.

Und da er returnt
if( fTotalLen > ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange ) )
return 0;

kommt er nie dazu die sfx zu machen wenn er nicht in range ist
11/03/2013 20:14 TrøublêMakêr#6
Quote:
Originally Posted by Kabellutscher View Post
Dasist mal ein Fix. Hast du es getestet?

@alle naps die das immer noch versuchen im client zu machen.

Lass es einfach und nehmt das. Es fehlt nur noch eine Abfrage beim der Sache wo die SFX erstellt wird.


if( pSrc->GetType() == OT_MOVER )
{
D3DXVECTOR3 v3Len = GetPos() - pSrc->GetPos();
FLOAT fTotalLen = D3DXVec3LengthSq( &v3Len );

if( fTotalLen > ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange ) )
return;
}

Das ist doch von Pumaaa. Er hatte es doch vor paar Monaten irgendwo released!

Link : [Only registered and activated users can see links. Click Here To Register...]
11/04/2013 00:14 Wanetrain#7
Quote:
Originally Posted by Bloodyrain' View Post
if( pSrc->GetType() == OT_MOVER )
{
D3DXVECTOR3 v3Len = GetPos() - pSrc->GetPos();
FLOAT fTotalLen = D3DXVec3LengthSq( &v3Len );

if( fTotalLen > ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange ) )
return;
}

Das ist doch von Pumaaa. Er hatte es doch vor paar Monaten irgendwo released!

Link : [Only registered and activated users can see links. Click Here To Register...]
Rly? such mal nach D3DXVec3LengthSq im Source, da findest du dass bei jeder Range Funktion, ursprünglich war auch mal ein Range Check drin der nicht ganz so funktionierte wie Gala es wollte, daher haben sie es auf 10000+ gestellt, damit es vorerst nichtmehr anschlägt..
11/04/2013 14:53 Мentus#8
Quote:
Originally Posted by Iban24 View Post
1. g_DPlay.SendHacking die Funktion gibt es nicht standartmäßig im FlyFF Source also muss die zeile raus.

2. Hier habt ihr einen Range Fix der ALLE Range Bugs/Hacks Fixt

In Ctrl.cpp

Vor:
Code:
		if( pSkillProp->dwID != SI_ACR_SUP_DARKILLUSION )
		{
			if( ((CMover *)pSrc)->HasBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION ) )
			{
				((CMover *)pSrc)->SetDarkCover( FALSE );
				((CMover *)pSrc)->RemoveBuff( BUFF_SKILL, SI_ACR_SUP_DARKILLUSION );		// ÇØÁ¦.
			}
		}
Dashier:

Code:
		D3DXVECTOR3 v3Len = GetPos() - pSrc->GetPos();
		FLOAT fTotalLen = D3DXVec3LengthSq( &v3Len );

		if( fTotalLen > ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange ) )
			return 0;
Das betrifft jeden Skill und nicht wie bei deinen billigen scheiß wo man jeden Skill abfragen muss.
Wenn jetzt wieder spezialisten kommen und sagen es ist aber auch Client Side dan guck euch mal an in was das ganze steht. Es steht in einem #ifdef __WORLDSERVER .
Ah okay, und was soll das jetzt bringen? Du weißt das die Range nur im Client sichtbar ist. Mal davon abgesehn liest der WorldServer nicht deine modifizierten Client Ressourcen :mad:
Quote:
Originally Posted by Kabellutscher View Post
Daran sieht man wieder das du nix kannst.

Dazuwäre das nur ein Client Side Fix.



Das ist klar wie man umgehen kann.



Entfernungen ändern dein ernst?
Anhand deines Post's kann ich erkennen, das du weder logisch denken noch überhaupt irgendwie in der Lage bist dich mit der Materie auseinander zu setzen.
Quote:
Originally Posted by Iban24 View Post
Nop, guck dir mal die ganze DoApplySkillEx funktion an.

CreateSkillSfx( pTarget, pSkillProp, pAddSkillProp );
ist Client side und kommt nachdem der Worldserver die Range prüft.

Und da er returnt
if( fTotalLen > ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange ) )
return 0;

kommt er nie dazu die sfx zu machen wenn er nicht in range ist
( Gehen wir mal davon aus, das der WorldServer die in dem Client liegenden Modifizierten Ressourcen liest )
Okok - du weißt wann die DoApplySkillEX Funktion aufgerufen wird?
Genau, bevor man den Skill nutzt. Gut, da ihr ja alle so Flyff Pro's seid müsst ihr auch wissen, wenn man als BP nun einen weglaufenenden Gegner asalt, wird man keinen Damage machen/DC kriegen what ever.

Quote:
Originally Posted by Wanetrain View Post
Rly? such mal nach D3DXVec3LengthSq im Source, da findest du dass bei jeder Range Funktion, ursprünglich war auch mal ein Range Check drin der nicht ganz so funktionierte wie Gala es wollte, daher haben sie es auf 10000+ gestellt, damit es vorerst nichtmehr anschlägt..
Korea und Range Fixes/Posi Bug Fixes, mal den Offi GW gesehn?
11/04/2013 16:00 WurstbrotQT#9
Quote:
Originally Posted by Мentus View Post
Ah okay, und was soll das jetzt bringen? Du weißt das die Range nur im Client sichtbar ist. Mal davon abgesehn liest der WorldServer nicht deine modifizierten Client Ressourcen :mad:
Wtf? :facepalm: Der Server weiß stets auf welcher Position sich ein Mover befindet, also ist diese Berechnung valid und muss funktionieren :rtfm:
11/04/2013 16:42 Wanetrain#10
Quote:
Originally Posted by Мentus View Post
Korea und Range Fixes/Posi Bug Fixes, mal den Offi GW gesehn?
Wie gesagt, es wurde wegen Fehlern raus genommen, oder denkst du ernsthaft die setzen sowas auf 10000+? :)

Posi Bug ist im übrigen etwas anderes, mein kleiner, dass Position's Handling ist in FlyFF gut, allerdings ja, über dass Netzwerk brauch ich groß nichts zu sagen? ich sag nur so: mehr als 1.000 User Tragen die Server von FlyFF nicht, weil sie einfach kein gutes Netzwerk drin haben.
11/04/2013 16:54 Pumaaa#11
Code:
	if( this != pSrc && pSrc->GetType() == OT_MOVER && ((CMover*)pSrc)->IsPlayer() )
	{
		
		float fX = GetPos().x-pSrc->GetPos().x;
		float fZ = GetPos().z-pSrc->GetPos().z;

		if( fX > 1.0f && fZ > 1.0f )
		{
			D3DXVECTOR3 v3Len = D3DXVECTOR3( fX, 0.0f, fZ );
			float fTotalLen = D3DXVec3LengthSq( &v3Len );

			fTotalLen -= GetRadiusXZ();
			fTotalLen -= pSrc->GetRadiusXZ();

			float fAttRange = ((CMover*)pSrc)->GetAttackRange( pSkillProp->dwAttackRange );

			if( fAttRange && fTotalLen < fAttRange )
					return;
		}
	}
Credits to me and SCREW YOU I'M BAKING COOKIES

Der Fix deckt soweit alle möglichen Berechnungsfehler ab, ist aber ungetestet.

Edit :

Das < hat schon seinen Platz da, ich habe mir schon was dabei gedacht ;)
11/04/2013 17:06 Sedrika#12
Solltest da lieber ein <= statt < machen.
11/04/2013 17:32 Mognakor#13
Ob < oder <= ist doch völlig egal die Chancen dass das einen Unterschied macht stehen vllt. 1:1000 und außerdem kann float ohnehin nicht jeden Wert darstellen weshalb nichtmal sicher ist ob der Fall dass es gleich ist jemals existiert.
12/15/2013 08:17 Crack-wtf#14
Ist ja nicht so dass man über packets nur mal kurz Positionsupdate an die Richtige Range setzen muss und danach wieder back.
Ist vielleicht nen netter fix gegen Resource/Memory Editing, aber trotzdem kein universal fix.
Desweiteren ist die Position von Movern oft asynchron und würde bei vielen Usern Bugs hervorrufen. (So wie bei offi. Man greift an, monster wird weder Aggro noch bekommt es damage.)