Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Justin Knight

Members
  • Posts

    258
  • Joined

  • Last visited

    Never

Posts posted by Justin Knight

  1. @'Matt':

    > Hey Justin, just letting you know I already made a tutorial on multiple bank tabs/pages.
    > http://www.freemmorpgmaker.com/showthread.php?tid=795

    Hey Matt, I saw this post but I wasn't sure I could actually do it in EO3 or if the accounts would need to be deleted.

    @'Officer:

    > Hey justin, i don't have vb6 anymore so can't really help you much. But i might be able to find the old converter matt and myself worked on awhile back and you could mess with it if you like.

    If you have this converter that'd be awesome. I love archiving stuff like this even if I don't use it.
  2. Hi there, I'm in need of a programmer for my mmo Mystica. 
    Things you should probably know first: Mystica is built in Eclipse Origins 3 (the source has been edited for bug fixes and a few feature additions) and the maps/accounts/items/spells/ect can not be wiped for the addition of any new features. (if a converter could be made that would be okay.)

    I'd like to get a quote for each of these additions.
    1\. Multiple bank pages/tabs. 
    2\. Limiting player gold to 999,999,999
    3\. Editable player houses.
    4\. pet system
    5\. stackable items or bank notes 

    I understand that a few of these could be out of scope but if you're willing to do any of the work please give a quote.
  3. Wow, I don't really know what she thinks is going to happen. I'm pretty sure none of the members are going to jump ship to another forum. -.-||
  4. In EO3 if you login while holding a direction towards an event that you can't normally pass through, you will clip through it while it's loading.

    on the server side replace PlayerMove with this
    ```
    Sub PlayerMove(ByVal index As Long, ByVal Dir As Long, ByVal movement As Long, Optional ByVal sendToSelf As Boolean = False)

       Dim Buffer As clsBuffer, mapnum As Long, i As Long
       Dim x As Long, y As Long
       Dim Moved As Byte, MovedSoFar As Boolean
       Dim NewMapX As Byte, NewMapY As Byte
       Dim TileType As Long, VitalType As Long, Colour As Long, amount As Long, begineventprocessing As Boolean
       Dim eventblock As Boolean

       ' Check for subscript out of range
       If IsPlaying(index) = False Or Dir < DIR_UP Or Dir > DIR_RIGHT Or movement < 1 Or movement > 2 Then
           Exit Sub
       End If

       Call SetPlayerDir(index, Dir)
       Moved = NO
       mapnum = GetPlayerMap(index)

       Select Case Dir
           Case DIR_UP

               ' Check to make sure not outside of boundries
               If GetPlayerY(index) > 0 Then

                   ' Check to make sure that the tile is walkable
                   If Not isDirBlocked(Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).DirBlock, DIR_UP + 1) Then
                       If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) - 1).Type <> TILE_TYPE_BLOCKED Then
                           If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) - 1).Type <> TILE_TYPE_RESOURCE Then

                               ' Check to see if the tile is a key and if it is check if its opened
                               If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) - 1).Type <> TILE_TYPE_KEY Or (Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) - 1).Type = TILE_TYPE_KEY And temptile(GetPlayerMap(index)).DoorOpen(GetPlayerX(index), GetPlayerY(index) - 1) = YES) Then

                                   eventblock = False

                                           'check to see if there is a solid event error fix 1005
                                       If TempPlayer(index).EventMap.CurrentEvents > 0 Then
                                           For i = 1 To TempPlayer(index).EventMap.CurrentEvents
                                               If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Global = 1 Then
                                                   If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).x = GetPlayerX(index) And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).y = GetPlayerY(index) - 1 And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               Else
                                                   If TempPlayer(index).EventMap.EventPages(i).x = GetPlayerX(index) And TempPlayer(index).EventMap.EventPages(i).y = GetPlayerY(index) - 1 And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               End If
                                           Next
                                        End If

                                   If eventblock = False Then

                                       Call SetPlayerY(index, GetPlayerY(index) - 1)
                                       SendPlayerMove index, movement, sendToSelf
                                       Moved = YES
                                   End If

                               End If
                           End If
                       End If
                   End If

               Else

                   ' Check to see if we can move them to the another map
                   If Map(GetPlayerMap(index)).Up > 0 Then
                       NewMapY = Map(Map(GetPlayerMap(index)).Up).MaxY
                       Call PlayerWarp(index, Map(GetPlayerMap(index)).Up, GetPlayerX(index), NewMapY)
                       Moved = YES
                       ' clear their target
                       TempPlayer(index).target = 0
                       TempPlayer(index).targetType = TARGET_TYPE_NONE
                       SendTarget index
                   End If
               End If

           Case DIR_DOWN

               ' Check to make sure not outside of boundries
               If GetPlayerY(index) < Map(mapnum).MaxY Then

                   ' Check to make sure that the tile is walkable
                   If Not isDirBlocked(Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).DirBlock, DIR_DOWN + 1) Then
                       If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) + 1).Type <> TILE_TYPE_BLOCKED Then
                           If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) + 1).Type <> TILE_TYPE_RESOURCE Then

                               ' Check to see if the tile is a key and if it is check if its opened
                               If Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) + 1).Type <> TILE_TYPE_KEY Or (Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index) + 1).Type = TILE_TYPE_KEY And temptile(GetPlayerMap(index)).DoorOpen(GetPlayerX(index), GetPlayerY(index) + 1) = YES) Then

                                   eventblock = False

                                           'check to see if there is a solid event error fix 1005
                                       If TempPlayer(index).EventMap.CurrentEvents > 0 Then
                                           For i = 1 To TempPlayer(index).EventMap.CurrentEvents
                                               If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Global = 1 Then
                                                   If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).x = GetPlayerX(index) And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).y = GetPlayerY(index) + 1 And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               Else
                                                   If TempPlayer(index).EventMap.EventPages(i).x = GetPlayerX(index) And TempPlayer(index).EventMap.EventPages(i).y = GetPlayerY(index) + 1 And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               End If
                                           Next
                                        End If

                                   If eventblock = False Then

                                       'move player
                                       Call SetPlayerY(index, GetPlayerY(index) + 1)
                                       SendPlayerMove index, movement, sendToSelf
                                       Moved = YES
                                  End If

                               End If
                           End If
                       End If
                   End If

               Else

                   ' Check to see if we can move them to the another map
                   If Map(GetPlayerMap(index)).Down > 0 Then
                       Call PlayerWarp(index, Map(GetPlayerMap(index)).Down, GetPlayerX(index), 0)
                       Moved = YES
                       ' clear their target
                       TempPlayer(index).target = 0
                       TempPlayer(index).targetType = TARGET_TYPE_NONE
                       SendTarget index
                   End If
               End If

           Case DIR_LEFT

               ' Check to make sure not outside of boundries
               If GetPlayerX(index) > 0 Then

                   ' Check to make sure that the tile is walkable
                   If Not isDirBlocked(Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).DirBlock, DIR_LEFT + 1) Then
                       If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type <> TILE_TYPE_BLOCKED Then
                           If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type <> TILE_TYPE_RESOURCE Then

                               ' Check to see if the tile is a key and if it is check if its opened
                               If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type <> TILE_TYPE_KEY Or (Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type = TILE_TYPE_KEY And temptile(GetPlayerMap(index)).DoorOpen(GetPlayerX(index) - 1, GetPlayerY(index)) = YES) Then

                                   eventblock = False

                                           'check to see if there is a solid event error fix 1005
                                       If TempPlayer(index).EventMap.CurrentEvents > 0 Then
                                           For i = 1 To TempPlayer(index).EventMap.CurrentEvents
                                               If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Global = 1 Then
                                                   If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).x = GetPlayerX(index) - 1 And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).y = GetPlayerY(index) And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               Else
                                                   If TempPlayer(index).EventMap.EventPages(i).x = GetPlayerX(index) - 1 And TempPlayer(index).EventMap.EventPages(i).y = GetPlayerY(index) And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               End If
                                           Next
                                        End If

                                   If eventblock = False Then

                                       'move player
                                       Call SetPlayerX(index, GetPlayerX(index) - 1)
                                       SendPlayerMove index, movement, sendToSelf
                                       Moved = YES
                                   End If

                               End If
                           End If
                       End If
                   End If

               Else

                   ' Check to see if we can move them to the another map
                   If Map(GetPlayerMap(index)).Left > 0 Then
                       NewMapX = Map(Map(GetPlayerMap(index)).Left).MaxX
                       Call PlayerWarp(index, Map(GetPlayerMap(index)).Left, NewMapX, GetPlayerY(index))
                       Moved = YES
                       ' clear their target
                       TempPlayer(index).target = 0
                       TempPlayer(index).targetType = TARGET_TYPE_NONE
                       SendTarget index
                   End If
               End If

           Case DIR_RIGHT

               ' Check to make sure not outside of boundries
               If GetPlayerX(index) < Map(mapnum).MaxX Then

                   ' Check to make sure that the tile is walkable
                   If Not isDirBlocked(Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).DirBlock, DIR_RIGHT + 1) Then
                       If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) + 1, GetPlayerY(index)).Type <> TILE_TYPE_BLOCKED Then
                           If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) + 1, GetPlayerY(index)).Type <> TILE_TYPE_RESOURCE Then

                               ' Check to see if the tile is a key and if it is check if its opened
                               If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) + 1, GetPlayerY(index)).Type <> TILE_TYPE_KEY Or (Map(GetPlayerMap(index)).Tile(GetPlayerX(index) + 1, GetPlayerY(index)).Type = TILE_TYPE_KEY And temptile(GetPlayerMap(index)).DoorOpen(GetPlayerX(index) + 1, GetPlayerY(index)) = YES) Then

                                   eventblock = False

                                           'check to see if there is a solid event error fix 1005
                                       If TempPlayer(index).EventMap.CurrentEvents > 0 Then
                                           For i = 1 To TempPlayer(index).EventMap.CurrentEvents
                                               If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Global = 1 Then
                                                   If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).x = GetPlayerX(index) + 1 And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).y = GetPlayerY(index) And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               Else
                                                   If TempPlayer(index).EventMap.EventPages(i).x = GetPlayerX(index) + 1 And TempPlayer(index).EventMap.EventPages(i).y = GetPlayerY(index) And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).WalkThrough = 0 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then
                                                   'stuff here cant walk here
                                                       eventblock = True
                                                   Else
                                                       'can walk here

                                                   End If
                                               End If
                                           Next
                                        End If

                                   If eventblock = False Then
                                       'move player
                                       Call SetPlayerX(index, GetPlayerX(index) + 1)
                                       SendPlayerMove index, movement, sendToSelf
                                       Moved = YES
                                   End If

                                   'Call SetPlayerX(index, GetPlayerX(index) + 1)
                                   'SendPlayerMove index, movement, sendToSelf
                                   'Moved = YES
                               End If
                           End If
                       End If
                   End If
               Else
                   ' Check to see if we can move them to the another map
                   If Map(GetPlayerMap(index)).Right > 0 Then
                       Call PlayerWarp(index, Map(GetPlayerMap(index)).Right, 0, GetPlayerY(index))
                       Moved = YES
                       ' clear their target
                       TempPlayer(index).target = 0
                       TempPlayer(index).targetType = TARGET_TYPE_NONE
                       SendTarget index
                   End If
               End If
       End Select

       With Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index))
           ' Check to see if the tile is a warp tile, and if so warp them
           If .Type = TILE_TYPE_WARP Then
               mapnum = .Data1
               x = .Data2
               y = .Data3
               Call PlayerWarp(index, mapnum, x, y)
               Moved = YES
           End If

           ' Check to see if the tile is a door tile, and if so warp them
           If .Type = TILE_TYPE_DOOR Then
               mapnum = .Data1
               x = .Data2
               y = .Data3
               ' send the animation to the map
               SendDoorAnimation GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index)
               Call PlayerWarp(index, mapnum, x, y)
               Moved = YES
           End If

           ' Check for key trigger open
           If .Type = TILE_TYPE_KEYOPEN Then
               x = .Data1
               y = .Data2

               If Map(GetPlayerMap(index)).Tile(x, y).Type = TILE_TYPE_KEY And temptile(GetPlayerMap(index)).DoorOpen(x, y) = NO Then
                   temptile(GetPlayerMap(index)).DoorOpen(x, y) = YES
                   temptile(GetPlayerMap(index)).DoorTimer = GetTick
                   SendMapKey index, x, y, 1
                   Call MapMsg(GetPlayerMap(index), "A door has been unlocked.", White)
               End If
           End If

           ' Check for a shop, and if so open it
           If .Type = TILE_TYPE_SHOP Then
               x = .Data1
               If x > 0 Then ' shop exists?
                   If Len(Trim$(Shop(x).Name)) > 0 Then ' name exists?
                       SendOpenShop index, x
                       TempPlayer(index).InShop = x ' stops movement and the like
                   End If
               End If
           End If

           ' Check to see if the tile is a bank, and if so send bank
           If .Type = TILE_TYPE_BANK Then
               SendBank index
               TempPlayer(index).InBank = True
               Moved = YES
           End If

           ' Check if it's a heal tile
           If .Type = TILE_TYPE_HEAL Then
               VitalType = .Data1
               amount = .Data2
               If Not GetPlayerVital(index, VitalType) = GetPlayerMaxVital(index, VitalType) Then
                   If VitalType = Vitals.HP Then
                       Colour = BrightGreen
                   Else
                       Colour = BrightBlue
                   End If
                   SendActionMsg GetPlayerMap(index), "+" & amount, Colour, ACTIONMSG_SCROLL, GetPlayerX(index) * 32, GetPlayerY(index) * 32, 1
                   SetPlayerVital index, VitalType, GetPlayerVital(index, VitalType) + amount
                   PlayerMsg index, "You feel rejuvinating forces flowing through your boy.", BrightGreen
                   Call SendVital(index, VitalType)
                   ' send vitals to party if in one
                   If TempPlayer(index).inParty > 0 Then SendPartyVitals TempPlayer(index).inParty, index
               End If
               Moved = YES
           End If

           ' Check if it's a trap tile
           If .Type = TILE_TYPE_TRAP Then
               amount = .Data1
               SendActionMsg GetPlayerMap(index), "-" & amount, BrightRed, ACTIONMSG_SCROLL, GetPlayerX(index) * 32, GetPlayerY(index) * 32, 1
               If GetPlayerVital(index, HP) - amount <= 0 Then
                   KillPlayer index
                   PlayerMsg index, "You're killed by a trap.", BrightRed
               Else
                   SetPlayerVital index, HP, GetPlayerVital(index, HP) - amount
                   PlayerMsg index, "You're injured by a trap.", BrightRed
                   Call SendVital(index, HP)
                   ' send vitals to party if in one
                   If TempPlayer(index).inParty > 0 Then SendPartyVitals TempPlayer(index).inParty, index
               End If
               Moved = YES
           End If

                   ' Slide
           If .Type = TILE_TYPE_SLIDE Then
               ForcePlayerMove index, MOVING_WALKING, .Data1
               Moved = YES
           End If

           'checkpoint
           If .Type = TILE_TYPE_CHECKPOINT Then
               SetCheckpoint index, .Data1, .Data2, .Data3
           End If

       End With

       ' They tried to hack
       If Moved = NO Then
           PlayerWarp index, GetPlayerMap(index), GetPlayerX(index), GetPlayerY(index)
       End If

       x = GetPlayerX(index)
       y = GetPlayerY(index)

       If Moved = YES Then
           If TempPlayer(index).EventMap.CurrentEvents > 0 Then
               For i = 1 To TempPlayer(index).EventMap.CurrentEvents
                   If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Global = 1 Then
                       If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).x = x And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).y = y And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).Trigger = 1 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then begineventprocessing = True
                   Else
                       If TempPlayer(index).EventMap.EventPages(i).x = x And TempPlayer(index).EventMap.EventPages(i).y = y And Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).Trigger = 1 And TempPlayer(index).EventMap.EventPages(i).Visible = 1 Then begineventprocessing = True
                   End If
                   If begineventprocessing = True Then
                       'Process this event, it is on-touch and everything checks out.
                       If Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).CommandListCount > 0 Then
                           TempPlayer(index).EventProcessingCount = TempPlayer(index).EventProcessingCount + 1
                           ReDim Preserve TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount)
                           TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).ActionTimer = GetTick
                           TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).CurList = 1
                           TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).CurSlot = 1
                           TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).eventID = TempPlayer(index).EventMap.EventPages(i).eventID
                           TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).pageID = TempPlayer(index).EventMap.EventPages(i).pageID
                           TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).WaitingForResponse = 0
                           ReDim TempPlayer(index).EventProcessing(TempPlayer(index).EventProcessingCount).ListLeftOff(0 To Map(GetPlayerMap(index)).Events(TempPlayer(index).EventMap.EventPages(i).eventID).Pages(TempPlayer(index).EventMap.EventPages(i).pageID).CommandListCount)
                       End If
                       begineventprocessing = False
                   End If
               Next
           End If
       End If

    End Sub
    ```
  5. I'm having a weird thing happen with spells that do damage over time.

    The first attack does like 260 damage and every bit of damage over time after that does 3100.

    Here's my damage over time code.
    ```
    Public Sub HandleDoT_Npc(ByVal mapnum As Long, ByVal index As Long, ByVal dotNum As Long)
    With MapNpc(mapnum).Npc(index).DoT(dotNum)
    If .Used And .Spell > 0 Then
    ' time to tick?
    If GetTick > .Timer + (Spell(.Spell).Interval * 1000) Then
    If CanPlayerAttackNpc(.Caster, index, True) Then

    Dim Vital As Long
    Dim Intel As Long
    Dim Will As Long

    Vital = Spell(.Spell).Vital
    Intel = GetPlayerStat(.Caster, Intelligence)
    Will = GetPlayerStat(.Caster, Willpower)
    ' set the vital

    ' scale spells edit
    Vital = Round((Vital * 0.7)) * Round(((Intel / 2) + Will))
    PlayerAttackNpc .Caster, index, Vital, , True

    End If
    .Timer = GetTick
    ' check if DoT is still active - if NPC died it'll have been purged
    If .Used And .Spell > 0 Then
    ' destroy DoT if finished
    If GetTick - .StartTime >= (Spell(.Spell).Duration * 1000) Then
    .Used = False
    .Spell = 0
    .Timer = 0
    .Caster = 0
    .StartTime = 0
    End If
    End If
    End If
    End If
    End With
    End Sub

    ```
    And here's a snip of my normal cast spell sub.
    ```
    ...
    ' set the vital
    Vital = Spell(spellnum).Vital

    ' scale spells edit
    Vital = Round((Vital * 0.7)) * Round(((Stats.Intelligence / 2) + Stats.Willpower))

    If Spell(spellnum).Type = SPELL_TYPE_HEALHP Then
    Vital = Vital + Round((GetPlayerStat(index, Stats.Willpower) * 0.6))
    End If

    If Spell(spellnum).Type = SPELL_TYPE_DAMAGEHP Then
    Vital = Vital + Round((GetPlayerStat(index, Stats.Intelligence) * 0.6))
    End If
    ...

    ```
    Thanks for any input you may have :)
  6. Players are able to walk through events (even if they don't have walkthough checked) because it only checks for events on the client side of the game. I found the code that I need to have check for events on the server side but I'm not sure what If statement I need to make/ how to word it. 

    Here's one of the 4 cases I'd need to change.
    ```
    Case DIR_LEFT

               ' Check to make sure not outside of boundries
               If GetPlayerX(index) > 0 Then

                   ' Check to make sure that the tile is walkable
                   If Not isDirBlocked(Map(GetPlayerMap(index)).Tile(GetPlayerX(index), GetPlayerY(index)).DirBlock, DIR_LEFT + 1) Then
                       If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type <> TILE_TYPE_BLOCKED Then
                           If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type <> TILE_TYPE_RESOURCE Then

                               ' Check to see if the tile is a key and if it is check if its opened
                               If Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type <> TILE_TYPE_KEY Or (Map(GetPlayerMap(index)).Tile(GetPlayerX(index) - 1, GetPlayerY(index)).Type = TILE_TYPE_KEY And temptile(GetPlayerMap(index)).DoorOpen(GetPlayerX(index) - 1, GetPlayerY(index)) = YES) Then

                                   'move player
                                       Call SetPlayerX(index, GetPlayerX(index) - 1)
                                       SendPlayerMove index, movement, sendToSelf
                                       Moved = YES

                               End If
                           End If
                       End If
                   End If

               Else

                   ' Check to see if we can move them to the another map
                   If Map(GetPlayerMap(index)).Left > 0 Then
                       NewMapX = Map(Map(GetPlayerMap(index)).Left).MaxX
                       Call PlayerWarp(index, Map(GetPlayerMap(index)).Left, NewMapX, GetPlayerY(index))
                       Moved = YES
                       ' clear their target
                       TempPlayer(index).target = 0
                       TempPlayer(index).targetType = TARGET_TYPE_NONE
                       SendTarget index
                   End If
               End If
    ```
    In case you want to know how players can clip through events, They just have to walk in to the event while holding ctrl. Keep holding the arrow key and ctrl, and close the game. Still holding arrowkey+ctrl log back in and the player should be inside of the event or past it.
  7. I'm getting a subscript out of range error in handletradeitem. Does anyone have any idea why?
    The error is at "TempPlayer(TempPlayer(index).InTrade).AcceptTrade = False" I have it pointed out in the code below. The index =6, Intrade=0, but acceptTrade is out of range.

    ```
    Sub HandleTradeItem(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)

       Dim Buffer As clsBuffer
       Dim invSlot As Long
       Dim amount As Long
       Dim EmptySlot As Long
       Dim itemnum As Long
       Dim i As Long

       Set Buffer = New clsBuffer
       Buffer.WriteBytes Data()

       invSlot = Buffer.ReadLong
       amount = Buffer.ReadLong

       Set Buffer = Nothing

       If invSlot <= 0 Or invSlot > MAX_INV Then Exit Sub

       itemnum = GetPlayerInvItemNum(index, invSlot)
       If itemnum <= 0 Or itemnum > MAX_ITEMS Then Exit Sub

       ' make sure they have the amount they offer
       If amount < 0 Or amount > GetPlayerInvItemValue(index, invSlot) Then
           Exit Sub
       End If

       If Item(itemnum).Type = ITEM_TYPE_CURRENCY Then
           ' check if already offering same currency item
           For i = 1 To MAX_INV
               If TempPlayer(index).TradeOffer(i).Num = invSlot Then
                   ' add amount
                   TempPlayer(index).TradeOffer(i).Value = TempPlayer(index).TradeOffer(i).Value + amount
                   ' clamp to limits
                   If TempPlayer(index).TradeOffer(i).Value > GetPlayerInvItemValue(index, invSlot) Then
                       TempPlayer(index).TradeOffer(i).Value = GetPlayerInvItemValue(index, invSlot)
                   End If
                   ' cancel any trade agreement
                   TempPlayer(index).AcceptTrade = False
                   TempPlayer(TempPlayer(index).InTrade).AcceptTrade = False

                   SendTradeStatus index, 0
                   SendTradeStatus TempPlayer(index).InTrade, 0

                   SendTradeUpdate index, 0
                   SendTradeUpdate TempPlayer(index).InTrade, 1
                   ' exit early
                   Exit Sub
               End If
           Next
       Else
           ' make sure they're not already offering it
           For i = 1 To MAX_INV
               If TempPlayer(index).TradeOffer(i).Num = invSlot Then
                   PlayerMsg index, "You've already offered this item.", BrightRed
                   Exit Sub
               End If
           Next
       End If

       ' not already offering - find earliest empty slot
       For i = 1 To MAX_INV
           If TempPlayer(index).TradeOffer(i).Num = 0 Then
               EmptySlot = i
               Exit For
           End If
       Next
       TempPlayer(index).TradeOffer(EmptySlot).Num = invSlot
       TempPlayer(index).TradeOffer(EmptySlot).Value = amount

       ' cancel any trade agreement and send new data
       TempPlayer(index).AcceptTrade = False
       'trade error
       >>>>>>>>>>>>>>>>>>>TempPlayer(TempPlayer(index).InTrade).AcceptTrade = False<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

       SendTradeStatus index, 0
       SendTradeStatus TempPlayer(index).InTrade, 0

       SendTradeUpdate index, 0
       SendTradeUpdate TempPlayer(index).InTrade, 1
    End Sub
    ```
  8. Does anyone know what is causing this glitch? I have not been able to reproduce it but a number of people who want to play my game are seeing this. I'm running EO3 btw.
    https://www.youtube.com/watch?v=Lf98YLwt5w4
  9. I need to know if they player has room for an item that they will only have the chance to get once from an event. 

    So far I have **this** but I need it to just out of the event process after doing the check and finding that there isn't room for anymore items.

    Public Sub CustomScript(index As Long, caseID As Long)

        Select Case caseID
            **Case 1**
    **If FindOpenInvSlot(index, GetPlayerEquipment(index, EqSlot)) < 1 Then**
    **                 PlayerMsg index, "You do not have enough room in your inventory.", BrightRed   **
    **            End If**
            Case Else

                PlayerMsg index, "You just activated custom script " & caseID & ". This script is not yet programmed.", BrightRed
        End Select
    End Sub

    Thanks for any help you can provide.
×
×
  • Create New...