| Mirage Source http://miragesource.net/forums/ |
|
| Shorten CanMove http://miragesource.net/forums/viewtopic.php?f=210&t=3922 |
Page 1 of 1 |
| Author: | Jacob [ Mon Jun 30, 2008 7:08 pm ] |
| Post subject: | Shorten CanMove |
This isn't really an optimization, more of a help when changing things in the CanMove function. If you ever had to change something in the CanMove function you know that you have to change every direction - Adding this CheckDirection function - you'll only need to edit the CheckDirection. modGameLogic Add the following: Code: Function CheckDirection(ByVal Direction As Byte) As Boolean Dim X As Long, Y As Long, i As Long CheckDirection = False Select Case Direction Case DIR_UP X = GetPlayerX(MyIndex) Y = GetPlayerY(MyIndex) - 1 Case DIR_DOWN X = GetPlayerX(MyIndex) Y = GetPlayerY(MyIndex) + 1 Case DIR_LEFT X = GetPlayerX(MyIndex) - 1 Y = GetPlayerY(MyIndex) Case DIR_RIGHT X = GetPlayerX(MyIndex) + 1 Y = GetPlayerY(MyIndex) End Select ' Check to see if the map tile is blocked or not If Map.Tile(X, Y).Type = TILE_TYPE_BLOCKED Then CheckDirection = True Exit Function End If ' Check to see if the key door is open or not If Map.Tile(X, Y).Type = TILE_TYPE_KEY Then ' This actually checks if its open or not If TempTile(X, Y).DoorOpen = NO Then CheckDirection = True Exit Function End If End If ' Check to see if a player is already on that tile For i = 1 To MAX_PLAYERS If IsPlaying(i) Then If GetPlayerMap(i) = GetPlayerMap(MyIndex) Then If (GetPlayerX(i) = X) And (GetPlayerY(i) = Y) Then CheckDirection = True Exit Function End If End If End If Next i ' Check to see if a npc is already on that tile For i = 1 To MAX_MAP_NPCS If MapNpc(i).Num > 0 Then If (MapNpc(i).X = X) And (MapNpc(i).Y = Y) Then CheckDirection = True Exit Function End If End If Next i End Function Replace Function CanMove with the following: Code: Function CanMove() As Boolean Dim i As Long, d As Long CanMove = True ' Make sure they aren't trying to move when they are already moving If Player(MyIndex).Moving <> 0 Then CanMove = False Exit Function End If ' Make sure they haven't just casted a spell If Player(MyIndex).CastedSpell = YES Then If GetTickCount > Player(MyIndex).AttackTimer + 1000 Then Player(MyIndex).CastedSpell = NO Else CanMove = False Exit Function End If End If d = GetPlayerDir(MyIndex) If DirUp Then Call SetPlayerDir(MyIndex, DIR_UP) ' Check to see if they are trying to go out of bounds If GetPlayerY(MyIndex) > 0 Then If CheckDirection(DIR_UP) Then CanMove = False ' Set the new direction if they weren't facing that direction If d <> DIR_UP Then Call SendPlayerDir End If Exit Function End If Else ' Check if they can warp to a new map If Map.Up > 0 Then Call SendPlayerRequestNewMap GettingMap = True End If CanMove = False Exit Function End If End If If DirDown Then Call SetPlayerDir(MyIndex, DIR_DOWN) ' Check to see if they are trying to go out of bounds If GetPlayerY(MyIndex) < MAX_MAPY Then If CheckDirection(DIR_DOWN) Then CanMove = False ' Set the new direction if they weren't facing that direction If d <> DIR_DOWN Then Call SendPlayerDir End If Exit Function End If Else ' Check if they can warp to a new map If Map.Down > 0 Then Call SendPlayerRequestNewMap GettingMap = True End If CanMove = False Exit Function End If End If If DirLeft Then Call SetPlayerDir(MyIndex, DIR_LEFT) ' Check to see if they are trying to go out of bounds If GetPlayerX(MyIndex) > 0 Then If CheckDirection(DIR_LEFT) Then CanMove = False ' Set the new direction if they weren't facing that direction If d <> DIR_LEFT Then Call SendPlayerDir End If Exit Function End If Else ' Check if they can warp to a new map If Map.Left > 0 Then Call SendPlayerRequestNewMap GettingMap = True End If CanMove = False Exit Function End If End If If DirRight Then Call SetPlayerDir(MyIndex, DIR_RIGHT) ' Check to see if they are trying to go out of bounds If GetPlayerX(MyIndex) < MAX_MAPX Then If CheckDirection(DIR_RIGHT) Then CanMove = False ' Set the new direction if they weren't facing that direction If d <> DIR_RIGHT Then Call SendPlayerDir End If Exit Function End If Else ' Check if they can warp to a new map If Map.Right > 0 Then Call SendPlayerRequestNewMap GettingMap = True End If CanMove = False Exit Function End If End If End Function If there are any problems please let me know. |
|
| Author: | wisefire [ Sun Aug 24, 2008 5:36 pm ] |
| Post subject: | Re: Shorten CanMove |
Work's great! Thank's. This made it a lot eaiser to add a nice "Walk Over Anything" Admin Feature to my Admin Panel. |
|
| Author: | Robin [ Sun Aug 24, 2008 6:01 pm ] |
| Post subject: | Re: Shorten CanMove |
Dammit. I just spent ages re-writing mine when I could have C&P this. ;-; |
|
| Page 1 of 1 | All times are UTC |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|