Justin Knight
-
Posts
258 -
Joined
-
Last visited
Never
Content Type
Profiles
Forums
Calendar
Posts posted by Justin Knight
-
-
@'Exception':
> Before that, I used (just to keep this small-ish)
>
> >! ![](http://i.imgur.com/Alub9Bo.png)
I like this one a lot. saved for later -
@'Matt':
> I made this one myself.
Very snazzy -
Share your current wallpaper! Bonus points for original works.
![](http://plzopen.me/pics/22a012399a9787b43a73c7825bc48cd3.png) -
@'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. -
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. -
I would play this game so hard. :D
-
Yuko banned.
in News
I appreciate the chance to give my input on stuff like this so I'm glad it's an open topic. -
Yuko banned.
in News
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. -.-|| -
it's just easier for me to understand. I set the vital then modify it right after.
-
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
``` -
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 :) -
I figured it out. I'll post the bug fix soon
-
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. -
Is there any script I could use to change the alignment of a monster from attack-on-sight to attack-when-attacked? I want to make a spell that lets you "tame" monsters.
-
Thanks for this solution. I ended up needing to do checks like this all over the trade codes cause there are a lot of little errors players can cause.
-
hmm well that line is right above it so i commented out the line giving the error for now. No one has reported any new errors so for now I guess it's fine.
-
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
``` -
Okay so I thought that was the answer but that pack of links proves it XD thank you so much
-
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 -
@'Niko':
> those are not custom graphics are they knightkid?
I didn't make the graphics but I did license them. The graphics and music is all properly licensed and legal for use in a commercial game. -
I'm glad to hear selling a game made in eclipse is legal. My game is coming to Steam in two days.
-
I mean like exit out of the event in the game. However I ended up with another solution. I just make any items that wont fit in a players inventory, drop on the ground below them.
-
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. -
Thanks Growlith1223, my server would crash requiring a full reboot once a week. This seems to have fixed the issue though!
[EO 2.0] Bank Tabs
in Source
Posted