Создание боссов
Итак пожалуй сегодня я расскажу\переведу\найду понимайте как хотите.
О том, да да, о том самом главном в игре. Не совсем, но все же.
Какую игру онлайн игру можно представить без боссов\монстров?
В этом уроке я расскажу вам как сделать босса
Итак в чем же заклчается отличие что босс кидает на вас стан(Т.е оглушение) пока его верные подданые делают вам рассколбас
Ну пожалуй начнем:
Сперва идет очередь сервера:
После открытия сервера переходим Project > Add Module
обзываем этот модуль modBosses
Заходим в модуль.
(Чуть поясню в этом модуле у нас будет содержаться сама начинка. Т.е тут вы будите записывать своих боссов.)
Code
Public Sub BossLogic(ByVal Target As Long, ByVal BossNum As Integer, ByVal npcNum As Long)
Select Case BossNum
Case 1
'Your first boss call will be here.
Case Else
Call PlayerMsg(Target, "There seems to be an error with this boss. Please take a screenshot of this and inform an admin.",
Red)
End Select
End Sub
После
внесем AI
Code
Private Sub TestBossLogic(ByVal Target As Long, ByVal npcNum As Long)
'resume normally attacking the player
Call TryNpcAttackPlayer(3, Target)
End Sub
Ну думаю по коду: TryNpcAttackPlayer NPC т.е наш босс ищет какого героя он сейчас будет метелить.
После
Вставляем собственно код стана(Вас ни кто не ограничивает если вы знаете хоть маленько суть EO то вы можите сюда прекрутить вплодь до заклинаний лечении союзников босса и спавна новых подчиненых босса)
Code
'Stuns the whole party for three seconds
Private Sub Stun(ByVal Target As Long)
Dim i As Long
'Check if the player is in a party
If TempPlayer(Target).inParty > 0 Then
For i = 1 To TempPlayer(Target).inParty
'Stun the player
TempPlayer(i).StunDuration = 3 'seconds
TempPlayer(i).StunTimer = GetTickCount
'Show animation
Call SendAnimation(#mapnum#, #animation#, GetPlayerX(i), GetPlayerY(i))
Next
Call PartyMsg(TempPlayer(Target).inParty, "The whole party has been stunned for three seconds!", Red)
Else
TempPlayer(Target).StunDuration = 3
TempPlayer(Target).StunTimer = GetTickCount
Call SendAnimation(#mapnum#, #animation#, GetPlayerX(Target), GetPlayerY(Target))
Call PlayerMsg(Target, "You have been stunned for three seconds!", Red)
End If
End Sub
TempPlayer(Target).StunDuration = 3 - цифру 3 надо заменить на кол-во секунд какое вы пожелаете
(Есть одна заметка: в скрипте вы можите найти:
'Check if the player is in a party - это стан если вы идете командой, а все что после Else это если вы ижете один дак вот в чем совет НЕ ставьте много времени если игрок идет один, т.к получится что игрок не успеет дойти до противника его убьют либо союзники босса либо он сам)
#mapnum# - номер карты на которой находится босс
#animation# - номер анимации(Анимация появится на игроке когда бос применит на нем оглушение)
Ну и так же собственно измините текст на ваш лад)
Теперь вернемся к Private Sub TestBossLogic
Вставляем после Call TryNpcAttackPlayer(3, Target)
Возвращаемся в Public Sub BossLogic
И вместо коментариев
Code
'Your first boss call will be here
Вставляем
Code
Call TestBossLogic(Target, #npcnum#)
#npcnum# - надо заменить номером Нпс из которого вы хотите сделать такую бяку.
Такс вот мы и закончили с интелекотом босса.
Теперь переходим в modConstants
Ищем нечто:
Code
Public Const NPC_BEHAVIOUR_ATTACKONSIGHT As Byte = 0
Public Const NPC_BEHAVIOUR_ATTACKWHENATTACKED As Byte = 1
Public Const NPC_BEHAVIOUR_FRIENDLY As Byte = 2
Public Const NPC_BEHAVIOUR_SHOPKEEPER As Byte = 3
Public Const NPC_BEHAVIOUR_GUARD As Byte = 4
Тут в моем случае надо ставить 5
Code
Public Const NPC_BEHAVIOUR_BOSS As Byte = 5
У вас этот ид может быть занят если вы поставите друго, ничего страшного.
далее идем в modServerLoop и ищем там:
Code
' Is the target playing and on the same map?
по этим коментарием види нечто такое:
Code
If IsPlaying(Target) And GetPlayerMap(Target) = MapNum Then
TryNpcAttackPlayer x, Target
Else
' Player left map or game, set target to 0
MapNpc(MapNum).Npc(x).Target = 0
MapNpc(MapNum).Npc(x).targetType = 0 ' clear
End If
заменяем на:
Code
If IsPlaying(Target) And GetPlayerMap(Target) = MapNum Then
If Npc(MapNpc(MapNum).Npc(x).Num).Behaviour = NPC_BEHAVIOUR_BOSS Then
Call BossLogic(Target, Npc(MapNpc(MapNum).Npc(x).Num).BossNum, MapNpc(MapNum).Npc(x).Num)
Else
TryNpcAttackPlayer x, Target
End If
Else
' Player left map or game, set target to 0
MapNpc(MapNum).Npc(x).Target = 0
MapNpc(MapNum).Npc(x).targetType = 0 ' clear
End If
Далее топаем в modTypes и ищем там NpcRec UDT ниже видем End Type
после End Type вставляем:
Все на этом мучение на стороне сервера закончены
Теперь наш путь лежит к клиенту
Сразу же переходим в modTypes ищем NpcRec UDT ниже видмм End Type
выше End Type вставляем:
Далее идем в frmEditor_NPC
Создайте новый layout (пример показан ниже)
http://i801.photobucket.com/albums/yy294/Adrammelech_2009/4.png
Создайте Text Box обзовите его txtBossNum, затем создайте Frame обзовите его fraBoss
В cmbBehavoir (он наспротив Behaviour) добавьте новый тип назавите его "Boss"
Затем Двойной клик по cmbBehavoir жмите CTRL + F найдите txtBossNum_Change
замените
Code
Private Sub txtBossNum_Change()
End Sub
на
Code
Private Sub txtBossNum_Change()
If Not IsNumeric(txtBossNum.text) Then Exit Sub
Npc(EditorIndex).BossNum = txtBossNum.text
End Sub
Через это окно идет подтверждение босса(т.е он будет отличатся малейшим интелектом от других боссов)
Как вы поняли мы пока только сделали босса под номером 1
Идем в modGameEditors и ищем там NpcEditorInit
после:
Code
.txtDamage.text = NPC(EditorIndex).Damage
вставьте:
Code
.txtBossNum.text = Npc(EditorIndex).BossNum
И последнее идем в modConstants
и опять же после:
Code
Public Const NPC_BEHAVIOUR_ATTACKONSIGHT As Byte = 0
Public Const NPC_BEHAVIOUR_ATTACKWHENATTACKED As Byte = 1
Public Const NPC_BEHAVIOUR_FRIENDLY As Byte = 2
Public Const NPC_BEHAVIOUR_SHOPKEEPER As Byte = 3
Public Const NPC_BEHAVIOUR_GUARD As Byte = 4
Ставим в моем случае:
Code
Public Const NPC_BEHAVIOUR_BOSS As Byte = 5
Алилуя все написано, ваши коменты по поводу этого.
Кому не жалко ставим +
Автор сего чуда: Lightning
Перевод: infermik