Všudypřítomné přechody

Pokud vás napadlo jak něco zlepšit, nebo chcete něco naopak zkritizovat

Moderátoři: Dungeon Servant, World Builder, Dungeon Master

Odpovědět
Uživatelský avatar
George
Příspěvky: 1652
Registrován: 29. 6. 2007 23.58
Bydliště: Znojmo
Kontaktovat uživatele:

Všudypřítomné přechody

Příspěvek od George »

V jednom modulu na NWvaultu sem našel zajímavou věc...
Přechod tvořenej spouští jen o čtvercovém tvaru (resp. několikaúhelník vytvarovanej do tvaru čtverce).
Obrázek

Nemám tušení jak to funguje, ale když dojdu někam ke konci lokace, tak se mi napíše třeba "Moving North" a hodí mě to do druhé lokace přesně na místo kam má, jako by tam byl přechod lokace... takže když přejdu u kraje lokace, tak se objevím na kraji lokace a když uprostřed tak uprostřed.….

Nevím, jestli jsou potřeba ještě další skripty, ale v události onenter tý spouště je …..

Kód: Vybrat vše

     //////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////                  ALL-IN-ONE SEAMLESS AREA TRANSITIONER  (for Neverwinter Nights)                 //////
//////  Date:  July 19, 2002  -  Version 1.1                                                            //////
//////  Created by:  Jaga Te'lesin      (jaga-nwn@earthlink.net)                                        //////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////                                        Copyright Notice                                          //////
//////  You may use this script for personal use however you like.  But if you redistribute you *must*  //////
//////  leave all code untouched and with all comments intact.                                          //////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////                                   For detailed instructions:                                     //////
//////  Please see the readme file that comes with the standard .zip distribution of this script.       //////
//////  It contains detailed installation and configuration instructions. A current version of this     //////
//////  script and the accompanying demo module can be found at:                                        //////
//////                      http://home.earthlink.net/~johncboat/AreaTrans.zip                          //////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

void   TransportEffect     ( object oTarget , float fDuration );
string GetNumberPadding    ( int nNumber );
int    GetIsValidTransArea ( string sAreaTag );

void main()
{ /// Begin User-Defined Variables ///
    float fMaxAreaDim = 80.0f;      // 10.0 per tile in one dimension.  (Areas under 3x3 not recommended)
                                    // Example: 16x16 areas would use 160.0f, 8x8 areas would use 80.0f, etc.
                                    //      *** NOTE:  Linked areas *should* be square only! ***
    float fLandingOffset = 5.0f;    // Distance out from edge in destination Area that PC will land (8 to 10 recommended)
    float fDiagTransSize = 5.0f;    // Distance out from any corner to sense diagonal movement (8 to 15 recommended)
    float fTransitionDelay = 2.0f;  // Delay before zoning, used to prevent cheating by PC's (2.0 to 4.0 recommended)
    int nDEBUG = FALSE;             // Turns on feedback while zoning.  Use for problem solving only, normal state is FALSE.
  /// End User-Defined Variables   ///

    object oPC = GetEnteringObject();
    if ((oPC != OBJECT_INVALID) && (GetLocalInt(oPC,"m_nZoning") != TRUE))
    {
        if (GetLocalInt(GetLocalObject(oPC, "SpawnedBy"),"DontZone") == 1)  return;
        vector vPCVector = GetPosition(oPC);                        // PC's current Vector
        float fPCFacing = GetFacingFromLocation(GetLocation(oPC));  // Direction PC is facing
        float fNorthDist = fMaxAreaDim - vPCVector.y;               // Distance from North edge
        float fSouthDist = vPCVector.y;                             // Distance from South edge
        float fEastDist = fMaxAreaDim - vPCVector.x;                // Distance from East edge
        float fWestDist = vPCVector.x;                              // Distance from West edge
        float fLeast = fMaxAreaDim;                                 // Initialize smallest found dist from any edge
        object oArea;                                               // Destination area
        location lLoc;                                              // Placeholder location for general use
        int nNumber;                                                // Placeholder number for general use
        int nSuccess = FALSE;                                       // Good zone located flag
        int nDir2;                                                  // Fallback direction for diagonal movement
        //effect eZoneEffect3 = EffectVisualEffect(VFX_IMP_ACID_L);   // ZoneIn effect for end-of-transition
        int nDir;                                                   // Direction: N=1,S=2,E=3,W=4,NW=5,NE=6,SW=7,SE=8

        // Loop through distances to find direction PC is moving, and set nDir to that direction
        nDir = 1;      // PC at NORTH edge
        fLeast = fNorthDist;
        if (fSouthDist <= fLeast)
        {
            nDir = 2;  // PC at SOUTH edge
            fLeast = fSouthDist;
        }
        if (fEastDist <= fLeast)
        {
            nDir = 3;  // PC at EAST edge
            fLeast = fEastDist;
        }
        if (fWestDist <= fLeast)
        {
            nDir = 4;  // PC at WEST edge
            fLeast = fWestDist;
        }
        if ((fSouthDist > (fMaxAreaDim-fDiagTransSize)) && (fWestDist < fDiagTransSize))
            nDir = 5;  // PC in NORTHWEST trigger area
         else if ((fSouthDist > (fMaxAreaDim-fDiagTransSize)) && (fWestDist > (fMaxAreaDim-fDiagTransSize)))
                  nDir = 6;  // PC in NORTHEAST trigger area
              else if ((fSouthDist < fDiagTransSize) && (fWestDist < fDiagTransSize))
                       nDir = 7;  // PC in SOUTHWEST trigger area
                   else if ((fSouthDist < fDiagTransSize) && (fWestDist > (fMaxAreaDim-fDiagTransSize)))
                            nDir = 8;  // PC in SOUTHEAST trigger area

        string sDestAreaX, sDestAreaY;
        int nCurAreaX, nCurAreaY;
        string sCurAreaTag  = GetStringLowerCase(GetTag(GetArea(oPC)));         // X,Y,Z Tag of Current Area
        string sXYTag       = GetStringLeft(sCurAreaTag,6);                     // Separate out X/Y from Z coordinate
        string sCurAreaX    = GetStringLeft(sXYTag,3);                          // X-coordinate of current area (from Tag)
        string sCurAreaY    = GetStringRight(sXYTag,3);                         // Y-coordinate of current area (from Tag)
        string sCurAreaZ    = GetStringRight(sCurAreaTag,3);                    // Z-coordinate of current area (from Tag)

        if (GetStringLeft(sCurAreaX,1) == "p")
        {
            nCurAreaX = StringToInt(GetStringRight(sCurAreaX,2));
            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Current Area X coordinate is " + GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX)) + ".");
        }
        else
            if (GetStringLeft(sCurAreaX,1) == "n")
            {
                nCurAreaX = (StringToInt(GetStringRight(sCurAreaX,2)) * (-1));
                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Current Area X coordinate is " + GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX)) + ".");
            }

        if (GetStringLeft(sCurAreaY,1) == "p")
        {
            nCurAreaY = StringToInt(GetStringRight(sCurAreaY,2));
            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Current Area Y coordinate is " + GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY)) + ".");
        }
        else
            if (GetStringLeft(sCurAreaY,1) == "n")
            {
                nCurAreaY = (StringToInt(GetStringRight(sCurAreaY,2)) * (-1));
                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Current Area Y coordinate is " + GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY)) + ".");
            }

        switch (nDir)           // Calculate new Area Tag based on the direction they are moving, and move them
        {
            case 1:             // Moving NORTH
            {
                --nCurAreaY;
                sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                oArea = GetObjectByTag(sCurAreaX + sDestAreaY + sCurAreaZ);
                lLoc = Location(oArea,Vector(vPCVector.x,fLandingOffset),fPCFacing);
                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Moving North:" + "\nDestination Area X TAG is " + sCurAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea))
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving North...",oPC);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 2:  // Moving SOUTH
            {
                ++nCurAreaY;
                sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                oArea = GetObjectByTag(sCurAreaX + sDestAreaY + sCurAreaZ);
                lLoc = Location(oArea,Vector(vPCVector.x,fMaxAreaDim - fLandingOffset),fPCFacing);
                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Moving South:" + "\nDestination Area X TAG is " + sCurAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea))
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving South...",oPC);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 3:  // Moving EAST
            {
                ++nCurAreaX;
                sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                oArea = GetObjectByTag(sDestAreaX + sCurAreaY + sCurAreaZ);
                lLoc = Location(oArea,Vector(fLandingOffset,vPCVector.y),fPCFacing);
                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Moving East:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sCurAreaY + ".");
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea))
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving East...",oPC);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 4:  // Moving WEST
            {
                --nCurAreaX;
                sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                oArea = GetObjectByTag(sDestAreaX + sCurAreaY + sCurAreaZ);
                lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,vPCVector.y),fPCFacing);
                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Moving West:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sCurAreaY + ".");
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea))
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving West...",oPC);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 5:  // Moving NORTHWEST
            {
                --nCurAreaX;
                sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                --nCurAreaY;
                sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))  // If target Area is validated..
                {
                    oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                    lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,fLandingOffset),fPCFacing);
                    if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area validated, moving NorthWest:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving NorthWest...",oPC);
                }
                else
                {
                    if (fNorthDist <= fWestDist)
                        nDir2 = 1;      // Set fallback direction indicator to North
                    else nDir2 = 4;     // Set fallback direction indicator to West
                    if (nDir2 == 1)  // Try to move them North since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying North..");
                        ++nCurAreaX;
                        sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(vPCVector.x,fLandingOffset),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"North is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving North...",oPC);
                        }
                        if (nSuccess == FALSE)   // Try to move them West since North Failed..
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"North Area NOT validated, trying West...");
                            --nCurAreaX;
                            ++nCurAreaY;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,vPCVector.y),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"West is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving West...",oPC);
                            }
                        }
                    }
                    if (nDir2 == 4)  // Try to move them West since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying West.");
                        ++nCurAreaY;
                        sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,vPCVector.y),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"West is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving West...",oPC);
                        }
                        if (nSuccess == FALSE)
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"West Area NOT validated, trying North.");
                            --nCurAreaY;
                            ++nCurAreaX;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(vPCVector.x,fLandingOffset),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"North is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving North...",oPC);
                            }
                        }
                    }
                }
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea)) // Re-verify target area validity
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 6:  // Moving NORTHEAST
            {
                ++nCurAreaX;
                sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                --nCurAreaY;
                sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))  // If target Area is validated..
                {
                    oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                    lLoc = Location(oArea,Vector(fLandingOffset,fLandingOffset),fPCFacing);
                    if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area validated, Moving NorthEast:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving NorthEast...",oPC);
                }
                else
                {
                    if (fNorthDist <= fEastDist)
                        nDir2 = 1;      // Set fallback direction indicator to North
                    else nDir2 = 3;     // Set fallback direction indicator to East
                    if (nDir2 == 1)  // Try to move them North since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying North...");
                        --nCurAreaX;
                        sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(vPCVector.x,fLandingOffset),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"North is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving North...",oPC);
                        }
                        if (nSuccess == FALSE)   // Try to move them East since North Failed..
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"North Area NOT validated, trying East...");
                            ++nCurAreaX;
                            ++nCurAreaY;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(fLandingOffset,vPCVector.y),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"East is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving East...",oPC);
                            }
                        }
                    }
                    if (nDir2 == 3)  // Try to move them East since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying East.");
                        ++nCurAreaY;
                        sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(fLandingOffset,vPCVector.y),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"East is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving East...",oPC);
                        }
                        if (nSuccess == FALSE)
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"East Area NOT validated, trying North.");
                            --nCurAreaX;
                            --nCurAreaY;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(vPCVector.x,fLandingOffset),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"North is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving North...",oPC);
                            }
                        }
                    }
                }
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea)) // Re-verify target area validity
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 7:  // Moving SOUTHWEST
            {
                --nCurAreaX;
                sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                ++nCurAreaY;
                sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))  // If target Area is validated..
                {
                    oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                    lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,fMaxAreaDim - fLandingOffset),fPCFacing);
                    if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area validated, Moving SouthWest:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving SouthWest...",oPC);
                }
                else
                {
                    if (fSouthDist <= fWestDist)
                        nDir2 = 2;      // Set fallback direction indicator to South
                    else nDir2 = 4;     // Set fallback direction indicator to West
                    if (nDir2 == 2)  // Try to move them South since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying South...");
                        ++nCurAreaX;
                        sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(vPCVector.x,fMaxAreaDim - fLandingOffset),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"South is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving South...",oPC);
                        }
                        if (nSuccess == FALSE)   // Try to move them West since South failed..
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"South Area NOT validated, trying West...");
                            --nCurAreaX;
                            --nCurAreaY;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,vPCVector.y),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"West is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving West...",oPC);
                            }
                        }
                    }
                    if (nDir2 == 4)  // Try to move them West since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying West...");
                        --nCurAreaY;
                        sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(fMaxAreaDim - fLandingOffset,vPCVector.y),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"West is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving West...",oPC);
                        }
                        if (nSuccess == FALSE)   // Try to move them South since West failed..
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"West Area NOT validated, trying South...");
                            ++nCurAreaY;
                            ++nCurAreaX;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(vPCVector.x,fMaxAreaDim - fLandingOffset),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"South is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving South...",oPC);
                            }
                        }
                    }
                }
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea)) // Re-verify target area validity
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
            case 8:  // Moving SOUTHEAST
            {
                ++nCurAreaX;
                sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                ++nCurAreaY;
                sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))  // If target Area is validated..
                {
                    oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                    lLoc = Location(oArea,Vector(fLandingOffset,fMaxAreaDim - fLandingOffset),fPCFacing);
                    if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area validated, Moving SouthEast:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                    if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving SouthEast...",oPC);
                }
                else
                {
                    if (fSouthDist <= fEastDist)
                        nDir2 = 2;      // Set fallback direction indicator to South
                    else nDir2 = 3;     // Set fallback direction indicator to East
                    if (nDir2 == 2)  // Try to move them South since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying South...");
                        --nCurAreaX;
                        sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(vPCVector.x,fMaxAreaDim - fLandingOffset),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"South is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving South...",oPC);
                        }
                        if (nSuccess == FALSE)   // Try to move them East since South Failed..
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"South Area NOT validated, trying East...");
                            ++nCurAreaX;
                            --nCurAreaY;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(fLandingOffset,vPCVector.y),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"East is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving East...",oPC);
                            }
                        }
                    }
                    if (nDir2 == 3)  // Try to move them East since it was closer edge..
                    {
                        if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"Destination Area NOT validated, trying East...");
                        --nCurAreaY;
                        sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                        if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                        {
                            oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                            lLoc = Location(oArea,Vector(fLandingOffset,vPCVector.y),fPCFacing);
                            nSuccess = TRUE;
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"East is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                            if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving East...",oPC);
                        }
                        if (nSuccess == FALSE)
                        {
                            if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"East Area NOT validated, trying South...");
                            ++nCurAreaY;
                            --nCurAreaX;
                            sDestAreaX = GetNumberPadding(nCurAreaX) + IntToString(abs(nCurAreaX));
                            sDestAreaY = GetNumberPadding(nCurAreaY) + IntToString(abs(nCurAreaY));
                            if (GetIsValidTransArea(sDestAreaX + sDestAreaY + sCurAreaZ))
                            {
                                oArea = GetObjectByTag(sDestAreaX + sDestAreaY + sCurAreaZ);
                                lLoc = Location(oArea,Vector(vPCVector.x,fMaxAreaDim - fLandingOffset),fPCFacing);
                                if (nDEBUG) if (GetIsPC(oPC))  SendMessageToPC(oPC,"South is valid and will be used:" + "\nDestination Area X TAG is " + sDestAreaX + "." + "\nDestination Area Y TAG is " + sDestAreaY + ".");
                                if (GetIsPC(oPC))  FloatingTextStringOnCreature("Moving South...",oPC);
                            }
                        }
                    }
                }
                if ((oArea != OBJECT_INVALID) && (GetAreaFromLocation(lLoc) == oArea)) // Re-verify target area validity
                {
                    SetLocalInt(oPC,"m_nZoning",TRUE);
                    TransportEffect(oPC,fTransitionDelay);
                    DelayCommand(fTransitionDelay,AssignCommand(oPC,JumpToLocation(lLoc)));
                    DelayCommand(fTransitionDelay,SetLocalInt(oPC,"m_nZoning",FALSE));
                    //DelayCommand(fTransitionDelay,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eZoneEffect3,lLoc));
                }
                break;
            }
        }
        if ((oArea == OBJECT_INVALID) && (nDEBUG))
            if (GetIsPC(oPC))  SendMessageToPC(oPC,"Movement to an invalid area attempted.  Area was not found with specified TAG.");
    }
    else
        SendMessageToAllDMs("Object was either invalid, already zoning, or had it's Don't Zone flag set.");
}

void TransportEffect (object oTarget, float fDuration)
{
    effect eZoneEffect1 = EffectVisualEffect(VFX_DUR_INVISIBILITY);
//    effect eZoneEffect2 = EffectVisualEffect(VFX_IMP_ACID_L);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eZoneEffect1,oTarget,(fDuration*2.0f));
//   ApplyEffectToObject(DURATION_TYPE_INSTANT,eZoneEffect2,oTarget);
}

string GetNumberPadding ( int nNumber )
{
    if ((nNumber < 10) && (nNumber > -1))  return "p0";
     else if ((nNumber > 9) && (nNumber < 100))  return "p";
      else if ((nNumber > -10) && (nNumber < 0))  return "n0";
       else if ((nNumber > -100) && (nNumber < -9))  return "n";
        else  return "";
}

int GetIsValidTransArea (string sAreaTag )
{
    object oArea = GetObjectByTag(sAreaTag);
    if (oArea != OBJECT_INVALID)  return TRUE;
     else  return FALSE;
}
Sell drugs. Run guns. Nail sluts and fuck the law.
Cenzanni
Příspěvky: 138
Registrován: 6. 11. 2006 19.41
Kontaktovat uživatele:

Příspěvek od Cenzanni »

No, můj hráčský pohled je jednoznačně pro tuto vychytávku :smile: Hledání přechodů je často dost ooc - způsoben prostě enginem hry (neříkám, že vždy, ale viděl bych to na většinu případů) Inu, chce to vyjádření někoho shora :helpsmilie:
Morgan Te'len

Kovan syn Helburův
OneHeart
Příspěvky: 1309
Registrován: 13. 4. 2006 21.03
Bydliště: Olduvaiská rokle v Tanzánii
Kontaktovat uživatele:

Příspěvek od OneHeart »

No nevím, že by Labir předělával přechody po celém světě moc nadějně nevidím :bigwink:
Nehledě na to, že by se tím ten svět imo ještě více zmenšil. Ze zkratek byly by superzkratky.
"Kdyby brány vnímání byly průzračné, každá věc by se člověku jevila taková, jaká je, neskonalá."
(William Blake)
Uživatelský avatar
sciorp
Příspěvky: 1991
Registrován: 31. 3. 2007 19.54
Bydliště: Hag Hargol
Kontaktovat uživatele:

Příspěvek od sciorp »

k těm celopřechodům se labir už někde vyjadřoval a řekl že nebudou
PODPIS
anurin
Příspěvky: 1736
Registrován: 27. 9. 2006 23.11

Příspěvek od anurin »

sciorp píše:k těm celopřechodům se labir už někde vyjadřoval a řekl že nebudou
Přesně tak, už to tu bylo a bylo to zamítnuto. Zmizeli by pak schované přechody, o kterých přeci každej nemusí vědět. Když člověk jde po cestě tak jde po cestě, ale mimo cesty jsou taky přechody... o tohle bychom se připravili.
Uživatelský avatar
George
Příspěvky: 1652
Registrován: 29. 6. 2007 23.58
Bydliště: Znojmo
Kontaktovat uživatele:

Příspěvek od George »

anurin píše:schované přechody
Schované přechody?.. vždyť je to OOC věc, tak není proč by měli být schovaný.
Sell drugs. Run guns. Nail sluts and fuck the law.
anurin
Příspěvky: 1736
Registrován: 27. 9. 2006 23.11

Příspěvek od anurin »

George píše:
anurin píše:schované přechody
Schované přechody?.. vždyť je to OOC věc, tak není proč by měli být schovaný.

Asi jsem to špatně popsal, jde o to že na cestě počítáš s tím že bude přechod. Ale můžou být i mimo cestu, což je docela fajn. Musíš si je najít... a ano je to ooc.. takové malé ooc zlo, ale tvá postava by viděla kudy lze a nelze projít. Tudíš jsem jen pro aby takové boční přechody existovaly.
Uživatelský avatar
George
Příspěvky: 1652
Registrován: 29. 6. 2007 23.58
Bydliště: Znojmo
Kontaktovat uživatele:

Příspěvek od George »

anurin píše:
George píše:
anurin píše:schované přechody
Schované přechody?.. vždyť je to OOC věc, tak není proč by měli být schovaný.

Asi jsem to špatně popsal, jde o to že na cestě počítáš s tím že bude přechod. Ale můžou být i mimo cestu, což je docela fajn. Musíš si je najít... a ano je to ooc.. takové malé ooc zlo, ale tvá postava by viděla kudy lze a nelze projít. Tudíš jsem jen pro aby takové boční přechody existovaly.
Promiň, uplně to nechápu... co vidíš špatnýho na tom, že by postava nemusela hledat přechody a chodit po nich?
Sell drugs. Run guns. Nail sluts and fuck the law.
kokosak
Příspěvky: 2954
Registrován: 17. 8. 2007 18.49
Kontaktovat uživatele:

Příspěvek od kokosak »

Jsem rozhodně pro takovéhle přechody. Není a nemůže být IC důvod, který by nutil postavy hledat zrovna ten jeden modravý pruh z celé míle konce lokace. Navrch, jestli jsem to pochopil dobře, tyhle spouště nejsou vidět, takže by nehledající osůbka ani nevěděla kde jde a kde nejde přejít jinak, než že by se o to pokusila.

Konečně by nemusela sledovající postavička v hajdu/invisu tlapkat uprostřed cesty, tože jinde není přechod. Chápu ale, že nastavit všechno tak, aby to navazovalo, by bylo asi dost těžké.
Eternal chaos comes with chocolate rain, you guys. CHOCOLATE RAIN!
Uživatelský avatar
George
Příspěvky: 1652
Registrován: 29. 6. 2007 23.58
Bydliště: Znojmo
Kontaktovat uživatele:

Příspěvek od George »

kokosak píše:Jsem rozhodně pro takovéhle přechody. Není a nemůže být IC důvod, který by nutil postavy hledat zrovna ten jeden modravý pruh z celé míle konce lokace. Navrch, jestli jsem to pochopil dobře, tyhle spouště nejsou vidět, takže by nehledající osůbka ani nevěděla kde jde a kde nejde přejít jinak, než že by se o to pokusila.

Konečně by nemusela sledovající postavička v hajdu/invisu tlapkat uprostřed cesty, tože jinde není přechod. Chápu ale, že nastavit všechno tak, aby to navazovalo, by bylo asi dost těžké.
Ne, tyhle přechody nejdou vidět (leda by se udělali jako přechody, což by bylo dost odporné a asi zbytečné)
Bohužel, nevím jak přesně to funguje, jestli to nějak buguje, nebo jestli je to na eq použitelný.
Sell drugs. Run guns. Nail sluts and fuck the law.
Carda
Příspěvky: 32
Registrován: 23. 9. 2007 14.56
Kontaktovat uživatele:

Příspěvek od Carda »

já sem pro :yes: ,a ty schované přechody by mohli být nějak oddělené :yes:
Uživatelský avatar
Nalk
Příspěvky: 2560
Registrován: 12. 2. 2007 18.50
Bydliště: Jižní Morava - Znojmo a Brno - stále 100% jižan
Kontaktovat uživatele:

Příspěvek od Nalk »

Nápad je to dobrej, díky tomu jak byla "postavena" EQ, tak je to asi i použitelné. Aspoˇbn rozšíříte RP - postavy nebojového zaměření se radši podrží cesty, ostatní si mohou lítat jak chtějí.

Tím postavena myslím, že většinou lokace navazují těmi omezující texturami lesa nebo tak, na sebe, takže ty přechody dost sedí k sobě (snad je to pochopitelné).

Problém (kvůli kterému hádám že to Labir zamítne) je dost práce - je potřeba pochopit tenhle kód, pak předělat všecky lokace na nové přechody a navíc zařídit, aby zmizely nepřenosti (z jedné strany tráva a z druhé strany neprůchodný les). To je sakra práce. :clover:
"Compared to the "righteous" greed of the rulers, the villains of the world seem much more honorable. When scum rules the world, only more scum is born... You don't even understand that?"
- Eustass Kid (One Piece)

Van, kněz Hrebogův, vyznavač Vyšší cesty
acc.: Nalkanar
Uživatelský avatar
The_Balrog
Příspěvky: 4924
Registrován: 3. 8. 2006 7.37
Bydliště: (ಠ_ృ)
Kontaktovat uživatele:

Příspěvek od The_Balrog »

Nebudu tu asi rozvádět tenhle "zlepšovák" moc do detailů, jen bych chtěl říct, že se dá použít jen na čtvercové lokace, což neplatí pro Eq, která má, co se pamatuji, i dost lokací i obdélníkových. (A právě ty jsou obvykle takové, na kterých by se tyto přechody využít daly.)
„Jmenuju se Natalie. A dělám si, co chci.“
Darmonlor
Příspěvky: 797
Registrován: 8. 2. 2007 17.12

Příspěvek od Darmonlor »

Škoda, protože je pravda že třeba sledovat někoho v invisu je teď pěkně nahouby, člověk musí čekat a odhadovat jak je daleko, nebo se OOC tellem domluvit (//napiš až budeš kus od přechodu), což už ale sledovanému nahraje na (byť i nechtěný) metagame.
Don't Dream It - Be It <i>Dr. Frank-N-Furter</i>

Amelia Wil Tesla Seyruun
Falik
merlik
Příspěvky: 235
Registrován: 28. 1. 2007 20.32
Bydliště: Plzeň

Příspěvek od merlik »

Sledovat v neviditelnosti postavy co behaji je pres prechody nemozne. "Vzdy" to na prechodu skonci metagamem, pripadne (pripadne jen jeho lehci verzi) prechodem postavicky z behu do chuze :) Nebo tim, ze neodhadnu vzdalenost a pak uz postavicku nenajdu. Proto jsem si vzdycky jen povzdechl, proc u prechodu kde kolem nic neni (napr. poust), ze tam nejsou po stranach dalsi pro nas, co neumi hide, jen neviditelnost. Ja vim, je to narocne na vsechno. Na WB, urcite i na system...

To ja jen jako takovy povzdech v praci po dobrem obede.
account: Tuxik
Elorfin Hanar
Odpovědět