Pvp Bereich Problem

05/04/2013 19:44 ™Daywalker#1
Hallo liebe Community,

ich wollte heute eine neue PvP Arena einfügen soweit funktioniert sie aber der Pvp Berei muss ya angepasst werden ich weiss auch in welcher Funktion in der Source.
Code:
BOOL    CMover::IsArenaTarget( CMover* pMover )
{
    CWorld* pWorld    = GetWorld();
    if( pWorld && pWorld->IsArena() )
    {
        int dx    = (int)( pMover->GetPos().x - 510 );
        int dy    = (int)( pMover->GetPos().z - 527 );
        int d    = dx * dx + dy * dy;
        if( d > 1246 )
            return FALSE;
        dx    = (int)( GetPos().x - 510 );
        dy    = (int)( GetPos().z - 527 );
        d    = dx * dx + dy * dy;
        if( d > 1246 )
            return FALSE;
        return TRUE;
    }
    return FALSE;
}
Aber ich weiss nicht so genau wie ich das machen sollen...
Währe nett wenn mir da jemand weiter helfen könnte.
05/04/2013 20:06 Menøx#2
Meine Empfehlung währe es die nicht genutzte aber im Beast einstellbare PvP-Zone wieder zu nutzten.

einfach die funktion hiermit ersetzten und schon haste noch den Normalen arena Bereich, doch überall wo du den Trigger mit PvP-Zone(Fight Region) hinsetzt kann man normal PvP zocken :)
Code:
BOOL CMover::IsArenaTarget( CMover* pMover )
{
 CWorld* pWorld = GetWorld();
 
if( pMover->IsRegionAttr( RA_FIGHT ) && IsRegionAttr( RA_FIGHT ) )
{
return TRUE;


}else if( pWorld && pWorld->IsArena() )
 {
  int dx = (int)( pMover->GetPos().x - 490 );
  int dy = (int)( pMover->GetPos().z - 507 );
  int d = dx * dx + dy * dy;
  if( d > 1246 )
   return FALSE;
  dx = (int)( GetPos().x - 490 );
  dy = (int)( GetPos().z - 507 );
  d = dx * dx + dy * dy;
  if( d > 1246 )
   return FALSE;
  return TRUE;
 }
 return FALSE;
}

Willste das NUR per Trigger machen, einfach den Arenateil löschen:

Code:
BOOL CMover::IsArenaTarget( CMover* pMover )
{
 
if( pMover->IsRegionAttr( RA_FIGHT ) && IsRegionAttr( RA_FIGHT ) )
{
return TRUE;
}
 return FALSE;
}

MfG Menox
05/04/2013 20:12 ™Daywalker#3
Okay danke ich werde es mal ausprobieren.
05/04/2013 21:12 Mognakor#4

Das ganze ist relativ einfach:

-Die Arena ist ein Kreis, die Grenzen dieses Kreises werden mit dem Satz des Pythagoras berechnet (a²+b²=c²)
-Sagen wir mal unser a ist dx und unser b ist dy, also ist c² das d im Code
-Daraus folgt das wir einen Kreis mit Radius Wurzel(d) haben
-Der Mittelpunkt des Kreises liegt bei x=510 und z=527, das - steht davor weil diese Werte unseren NULLpunkt bilden
-Das ganze wird zweimal überprüft je einmal für den Angreifer und den Verteidiger, dementsprechend ließen sich auch Arenen bauen in denen man zuerst angreifbar ist bevor man selbst angreifen kann oder andersrum, durch Veränderungen des jeweiligen d.


Will man nun eine neue Arena einfügen mit neuen Radius,Mittelpunkt oder beidem geht man wie folgt vor:

-Man stellt den Mittelpunkt fest (am besten mit Beast).
-Ersetzt die alten x- und z-Werte mit den neuen
-Man geht solange entlang der x- ODER z-Achse vom Mittelpunkt in eine Richtung bis man am Arenarand ist
-Zieht den x- bzw. z-Wert am Rand von dem des Mittelpunkts ab
-Bildet das Quadrat der Differenz und trägt das in den Source ein.
05/04/2013 22:59 ™Daywalker#5
Hab es mal so gemacht wie Menøx es geschrieben hat. Funktioniert aber ich kann wohl einen angreifen aber der andere mich nicht das ist irgendwie komisch..