Вторник, 26 Ноября 2024, 08:00

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Боссярки для EO
infermikДата: Воскресенье, 20 Ноября 2011, 00:34 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Создание боссов

Итак пожалуй сегодня я расскажу\переведу\найду понимайте как хотите.
О том, да да, о том самом главном в игре. Не совсем, но все же.

Какую игру онлайн игру можно представить без боссов\монстров?
В этом уроке я расскажу вам как сделать босса

Итак в чем же заклчается отличие что босс кидает на вас стан(Т.е оглушение) пока его верные подданые делают вам рассколбас biggrin

Ну пожалуй начнем:


Сперва идет очередь сервера:

После открытия сервера переходим 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


После
Code
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 т.е наш босс ищет какого героя он сейчас будет метелить.

После
Code
End Sub

Вставляем собственно код стана(Вас ни кто не ограничивает если вы знаете хоть маленько суть 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)
Code
Call Stun(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 вставляем:
Code
BossNum As Integer


Все на этом мучение на стороне сервера закончены smile

Теперь наш путь лежит к клиенту

Сразу же переходим в modTypes ищем NpcRec UDT ниже видмм End Type
выше End Type вставляем:
Code
BossNum As Integer


Далее идем в 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


Алилуя все написано, ваши коменты по поводу этого. biggrin
Кому не жалко ставим + smile

Автор сего чуда: Lightning
Перевод: infermik


Выпрямляю путем кнута и пряника
DusklyДата: Воскресенье, 20 Ноября 2011, 01:07 | Сообщение # 2
Rush Games
Сейчас нет на сайте
круто, позже проверю)


Разрабатываеться:
флеш игра для соц. Сетей (Бои друзей) - временное название!
3д игра (пока без названия)
infermikДата: Понедельник, 05 Декабря 2011, 17:04 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Модераторы закройте пост тема искажена, нету половину содержимого

Выпрямляю путем кнута и пряника
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг