forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Система боя врага в РПГ (http://forum.boolean.name/showthread.php?t=14761)

LLI.T.A.L.K.E.R. 18.05.2011 01:20

Система боя врага в РПГ
 
Пробую написать подобную систему..
Код внутри:
Код:

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Camera=CreateCamera()

Player=CreateCube()
PositionEntity Player,5,0,-5
Player_Health%=100

Enemy=CreateCube()
EntityColor Enemy,200,100,100
Enemy_IsFight=0                                ; атакует
Enemy_FightFrame#=0                ; задержка атаки (время размаха)

While Not KeyDown(1)
       
        If KeyDown(200) Then MoveEntity Player,0,0,0.1        ; ^
        If KeyDown(208) Then MoveEntity Player,0,0,-0.1        ; \/
       
        If KeyDown(203) Then MoveEntity Player,-0.1,0,0        ; <
        If KeyDown(205) Then MoveEntity Player,0.1,0,0        ; >
       
        PositionEntity Camera,EntityX#(Player),EntityY#(Player)+3,EntityZ#(Player)-5
        PointEntity Camera,Player
       
        PointEntity Enemy,Player
        If EntityDistance#(Enemy,Player)>3 Then
                MoveEntity Enemy,0,0,0.08
        Else
                If Enemy_IsFight=0 Then Enemy_IsFight=1
        EndIf
       
        If Enemy_IsFight=1 Then
                Enemy_FightFrame#=Enemy_FightFrame#+1
                If Enemy_FightFrame#>75 Then
                        Enemy_IsFight=0
                        Enemy_FightFrame#=0
                       
                        If EntityDistance#(Enemy,Player)<4 Then Player_Health=Player_Health-5
                EndIf
        EndIf
       
        If EntityDistance#(Enemy,Player)>5 Then
                Enemy_IsFight=0
                Enemy_FightFrame#=0
        EndIf
       
        UpdateWorld
        RenderWorld
       
        Text 5,5,Player_Health
        Text 5,25,"Dis:"+EntityDistance#(Enemy,Player)+" | Fight: "+Enemy_IsFight+" | Sum: "+Enemy_FightFrame#
       
        Flip
Wend



Цитата:

Пояснение:
Игрок двигается от врага, тот к игроку.
Если враг дальше игрока на 3 метра, двигается к нему.
Если враг ближе к игроку чем 3 метра - начинает размах (Enemy_FightFrame#)
Проходит 75 мксек - происходит удар.
Если враг ближе к игроку на 4 метра наносится урон.
Если игрок дальше от врага на 5 метров - удар отменяется.
В отличии от глупых боёв в ЛА2 - есть проверка "игрок во время удара вблизи или нет".
(В Ла2 и ВоВ: если враг размахнулся, Ты хоть за 5 метров убегай - он тебя считай побил)


Нужно будет добавить модель противника (с мечом или кулаками). И ориентироваться по анимации.

Hurrit 18.05.2011 02:01

Ответ: Система боя врага в РПГ
 
юзай функции, а то сложно потом будет.

LLI.T.A.L.K.E.R. 18.05.2011 03:03

Ответ: Система боя врага в РПГ
 
Цитата:

Repeat

Enemy_UpdateFight(то-то, это)

Flip
Until

Function Enemy_UpdateFight(то-то,это)
If то-то>3 then
... ... ...
End Function
Примерно об этом?

У себя я обычно потом врагов, предметы и т.п. в их includЫ вывожу.

LLI.T.A.L.K.E.R. 18.05.2011 11:01

Ответ: Система боя врага в РПГ
 
Добавлена примитивная модель врага для наглядности боя.

http://ifolder.ru/23603996
(внутри архива: исходник.bb, модели мах+3дс)

В наглядности кода ничего не менял.
Следующим будет вынесения кода боя отдельно. Проба боя игрока.

Потребуется справка: "баланс удара и нанесения урона между игроком и врагом, тактика боя и т.п." Т.е. так, чтобы драка была "равная" и захватывающая.

Nex 18.05.2011 13:38

Ответ: Система боя врага в РПГ
 
Если бы это расчет урона был, то было бы круто, а так... проверка на расстояние.

Dream 18.05.2011 15:31

Ответ: Система боя врага в РПГ
 
Цитата:

Проходит 75 мксек - происходит удар.
Цитата:

Enemy_FightFrame#=Enemy_FightFrame#+1
Это ну ни как не 75 мсек

HolyDel 18.05.2011 18:01

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 188817)
В отличии от глупых боёв в ЛА2 - есть проверка "игрок во время удара вблизи или нет".
(В Ла2 и ВоВ: если враг размахнулся, Ты хоть за 5 метров убегай - он тебя считай побил)

.

для рпг самое то

Dream 18.05.2011 20:57

Ответ: Система боя врага в РПГ
 
Цитата:

В отличии от глупых боёв в ЛА2 - есть проверка "игрок во время удара вблизи или нет".
(В Ла2 и ВоВ: если враг размахнулся, Ты хоть за 5 метров убегай - он тебя считай побил)
.
Ты мало в л2 играл, или у тебя большой пинг. проверка на расстояние там есть. Правда только для скилов. для каждого удара это былобы слишком. когда у чувака скрость атаки оочень высокая - он машет оружием с такой скоростью что видно только мерцание "сосок". а теперь представь еслиб на сервере расчитывалось растояние для каждого удара over9000 игроков?

LLI.T.A.L.K.E.R. 18.05.2011 21:50

Ответ: Система боя врага в РПГ
 
Это не будет Л2.
Замену мксек ещё не продумал.
(пока это будет кадр анимации)

Цитата:

Если бы это расчет урона был, то было бы круто, а так... проверка на расстояние.
Проверку столкновения в части тела не предполагаю.
Пока мне требуется примитивный бой (как в стратегиях... WarCraft например)
http://www.youtube.com/watch?v=3qcwZ...e=related#t=45

NitE 18.05.2011 22:27

Ответ: Система боя врага в РПГ
 
Цитата:

Если бы это расчет урона был, то было бы круто, а так... проверка на расстояние.
Объясни на милость, где ты в верхней цитате увидел такие слова как "столкновение" и "части тела" ?
Цитата:

Проверку столкновения в части тела не предполагаю.

LLI.T.A.L.K.E.R. 18.05.2011 22:39

Ответ: Система боя врага в РПГ
 
В чём подразумеваешь "расчёт урона" ?
Сила, скилл врага и игрока?

Если что, это будет после того как будут готовы сами враги и управление игроком.

Это только начало.. Версия так сказать -0.1 (минус 0.1)

Crayzi 22.05.2011 11:29

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от Dream (Сообщение 188884)
Ты мало в л2 играл, или у тебя большой пинг. проверка на расстояние там есть. Правда только для скилов. для каждого удара это былобы слишком. когда у чувака скрость атаки оочень высокая - он машет оружием с такой скоростью что видно только мерцание "сосок". а теперь представь еслиб на сервере расчитывалось растояние для каждого удара over9000 игроков?

Всмысле, ты хош не брать в рассчет расстояние между персонажами при рассчете можно ли нанести удар или нет? Это-ж глупо, знаеш сколько читов наклепают сразу, бегаеш в одной локации и коцаеш когото кто лазит на другом конце игрового мира, а он стоит и тупит в шоке, в непонятках кто его коцает.. ))

Igor 22.05.2011 15:18

Ответ: Система боя врага в РПГ
 
Цитата:

коцаеш когото кто лазит на другом конце игрового мира
Делается одна проверка вместо двух - только при замахе.
При ударе проверка на расстояние не производится

LLI.T.A.L.K.E.R. 22.05.2011 20:49

Ответ: Система боя врага в РПГ
 
У меня тоже одна проверка.
Думаю, намного правильнее проверка будет при ударе (а не замахе).
Ведь игровой герой может быстро перемещаться, в этом появляется возможность отмахиваться от удара.

Пока что это заготовка для новичков (я не задумывал делать онлайн, или ла2)
Далее применю её в открытом рпг примере.

(Если на то пойдёт - придётся поучить "советы программирования рпг")

Crayzi 22.05.2011 22:21

Ответ: Система боя врага в РПГ
 
Хорошая мысль насчет проверки при нанесении удара, для того чтобы замахнутся ведь ненужно цели, правильно? В таком случае если к моменту нанесения удара цель будет вне досягаемости то можно засчитать это за промах, так будет реалистичнее, правда только при низких пингах...(правда при высоких при любом раскладе будет коряво)

Dream 22.05.2011 23:23

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от Crayzi (Сообщение 189151)
Всмысле, ты хош не брать в рассчет расстояние между персонажами при рассчете можно ли нанести удар или нет? Это-ж глупо, знаеш сколько читов наклепают сразу, бегаеш в одной локации и коцаеш когото кто лазит на другом конце игрового мира, а он стоит и тупит в шоке, в непонятках кто его коцает.. ))

Кто сказал что не брать в расчёт растояние? я говорю что там считается дистанция только во время начала удара - которая и решает делать возможнсть удара или нет, не более. по поводу читов - ВСЕ расчёты игрового мира ДОЛЖНЫ производится на сервере

Crayzi 22.05.2011 23:43

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от Dream (Сообщение 189198)
Кто сказал что не брать в расчёт растояние? я говорю что там считается дистанция только во время начала удара - которая и решает делать возможнсть удара или нет, не более. по поводу читов - ВСЕ расчёты игрового мира ДОЛЖНЫ производится на сервере

Согласен, но на клиентской части должна быть такая-же система праверки возможности нанесения удара, чтобы сервер не проверял каждый судорожный клик игрока при недостаточном количестве манны или превышенной дистанции.
П.с. Мы походу друг друга непонимаем)))

Nex 18.07.2011 12:18

Ответ: Система боя врага в РПГ
 
Nite,
Цитата:

Сообщение от NitE (Сообщение 188892)

Объясни на милость, где ты в верхней цитате увидел такие слова как "столкновение" и "части тела" ?

А где ты в моем посте увидел эти слова? Я имел ввиду, что если бы урон расчитывался от характеристик юнитов..

NitE 18.07.2011 22:25

Ответ: Система боя врага в РПГ
 
Nex, в твоём, нигде. Ты написал:
Цитата:

Если бы это расчет урона был, то было бы круто, а так... проверка на расстояние.
Тебе отвечают:
Цитата:

Проверку столкновения в части тела не предполагаю.
Какую нах*р проверку столкновения в части тела ? Откуда он это взял ? (Это было-бы нормально, просто написать, но как ответ твоему посту - нонсенс)

LLI.T.A.L.K.E.R. 18.07.2011 23:04

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от Nex (Сообщение 188847)
Если бы это расчет урона был, то было бы круто, а так... проверка на расстояние.

Если бы это был расчёт урона.... Расчёт... Расчёт.. Из чего именно? Просто так нечего рассчитывать..

Предложение нужно дополнить "расчёт урона по скилу игрока и т.д.".
Я дополнил как "расчёт урона относительно того, в какую часть тела попал враг своим орудием". Здесь особо данные персонажей не нужны.

Так как систему не настроить на каждые нужды, думаю стоит сразу выводить в include с множественными параметрами функций.

zAvaTARz 15.08.2011 18:13

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 188817)
Пробую написать подобную систему..
Код внутри:
Код:

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Camera=CreateCamera()

Player=CreateCube()
PositionEntity Player,5,0,-5
Player_Health%=100

Enemy=CreateCube()
EntityColor Enemy,200,100,100
Enemy_IsFight=0                                ; атакует
Enemy_FightFrame#=0                ; задержка атаки (время размаха)

While Not KeyDown(1)
       
        If KeyDown(200) Then MoveEntity Player,0,0,0.1        ; ^
        If KeyDown(208) Then MoveEntity Player,0,0,-0.1        ; \/
       
        If KeyDown(203) Then MoveEntity Player,-0.1,0,0        ; <
        If KeyDown(205) Then MoveEntity Player,0.1,0,0        ; >
       
        PositionEntity Camera,EntityX#(Player),EntityY#(Player)+3,EntityZ#(Player)-5
        PointEntity Camera,Player
       
        PointEntity Enemy,Player
        If EntityDistance#(Enemy,Player)>3 Then
                MoveEntity Enemy,0,0,0.08
        Else
                If Enemy_IsFight=0 Then Enemy_IsFight=1
        EndIf
       
        If Enemy_IsFight=1 Then
                Enemy_FightFrame#=Enemy_FightFrame#+1
                If Enemy_FightFrame#>75 Then
                        Enemy_IsFight=0
                        Enemy_FightFrame#=0
                       
                        If EntityDistance#(Enemy,Player)<4 Then Player_Health=Player_Health-5
                EndIf
        EndIf
       
        If EntityDistance#(Enemy,Player)>5 Then
                Enemy_IsFight=0
                Enemy_FightFrame#=0
        EndIf
       
        UpdateWorld
        RenderWorld
       
        Text 5,5,Player_Health
        Text 5,25,"Dis:"+EntityDistance#(Enemy,Player)+" | Fight: "+Enemy_IsFight+" | Sum: "+Enemy_FightFrame#
       
        Flip
Wend





В отличии от глупых боёв в ЛА2 - есть проверка "игрок во время удара вблизи или нет".
(В Ла2 и ВоВ: если враг размахнулся, Ты хоть за 5 метров убегай - он тебя считай побил)


Нужно будет добавить модель противника (с мечом или кулаками). И ориентироваться по анимации.

в ла2 удар такой на 5 метров отбежал и всеравно попало
ты думаешь что твой перс которым ты управляешь это все и вся, нет там в нутри есть пивот который двигаеться как показывает сервер
ты отправляешь комманду то что ты нажал бежать, чел двигаеться на компе не отдавая на сервер анимацию движения и скорость передвижения ему отдаеться информация о том что ты нажал , на сервере показывает что ты стоишь рядом, хотя у тебя на экране показано что ты бежишь, если бы была бы система движения на компе, появилось бы много читов и.т.д а так...

Dream 15.08.2011 20:03

Ответ: Система боя врага в РПГ
 
спасибо, кэп

h1dd3n 15.08.2011 20:33

Ответ: Система боя врага в РПГ
 
нихрена он не кэп.
система движения в ла2 (и в аионе) клиентная. клиент при каждом шаге отсылает CM_MOVE с целевыми координатами, так что на фришках без проблем можно сделать спидхак и тп в любую точку. На оффах просто проверяется скорость перса, и в случае сх откидывает назад.
ни на какие "анимации" это не завязано.

Dream 15.08.2011 20:43

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от h1dd3n (Сообщение 199032)
нихрена он не кэп.
система движения в ла2 (и в аионе) клиентная. клиент при каждом шаге отсылает CM_MOVE с целевыми координатами, так что на фришках без проблем можно сделать спидхак и тп в любую точку. На оффах просто проверяется скорость перса, и в случае сх откидывает назад.
ни на какие "анимации" это не завязано.

Поверь, движение происходит на сервере. А и заплачу 100$ за спид хак для фришного серва (OverWorld,l2server ну или любого другогг серва с нормальными рейдами и онлайном)

Ну а вообще происходит так -
чел кликнул бежать кудато. клиент отправляет запрос на сервер что нужно передвинутся тудато, если сервер разрешает - клиент симулирует передвижение и ждёт ответа от сервера (раз в пол секнуды -секунду) сервер высылает клиенту координаты на которых игрок должен сейчас находится. Клиент подстраивает то что видит игрок под то что прислал сервер. Именно поэтому невохможно сдвинутся сместа если пропал конект с сервером. и поэтому если большой пинг игрок видеть скачки положения своего перса.

Tadeus 15.08.2011 22:16

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от Dream (Сообщение 199033)
Поверь, движение происходит на сервере. А и заплачу 100$ за спид хак для фришного серва (OverWorld,l2server ну или любого другогг серва с нормальными рейдами и онлайном)

Ну а вообще происходит так -
чел кликнул бежать кудато. клиент отправляет запрос на сервер что нужно передвинутся тудато, если сервер разрешает - клиент симулирует передвижение и ждёт ответа от сервера (раз в пол секнуды -секунду) сервер высылает клиенту координаты на которых игрок должен сейчас находится. Клиент подстраивает то что видит игрок под то что прислал сервер. Именно поэтому невохможно сдвинутся сместа если пропал конект с сервером. и поэтому если большой пинг игрок видеть скачки положения своего перса.

Обычно начинается движение перса еще до ответа сервера. Его (движения) возможность проверяется на клиентской стороне. А вот если сервер не согласен, вот тогда уже перса толкают обратно на место. Просто, если до ответа сервера перса не двигать, то движения будут очень дёрганные.

Dream 16.08.2011 02:29

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от Tadeus (Сообщение 199037)
Обычно начинается движение перса еще до ответа сервера. Его (движения) возможность проверяется на клиентской стороне. А вот если сервер не согласен, вот тогда уже перса толкают обратно на место. Просто, если до ответа сервера перса не двигать, то движения будут очень дёрганные.

В тойже л2, именно так - ждет ответа от сервера. но там управление мышкой же, так что там можно

PackegerX 07.09.2011 04:04

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 188817)
Пробую написать подобную систему..

попробуй мою может натолкнет на мысль:
Код:

For monsters.monster=Each Monster
If EntityDistance (monsters\entity,player)<monsters\AggrRange Then
 monsters\aggr=1
 PointEntity monsters\entity,player
EndIf
If monsters\aggr=1 And EntityDistance (monsters\entity,player)>monsters\attackrange Then MoveEntity monsters\entity,0,0,monsters\MoveSpeed#
If monsters\state$="Atacking" And EntityDistance (monsters\entity,player)<monsters\attackrange Then monsters\atacktimer=monsters\atacktimer-1
 If monsters\atacktimer<1 Then
 If (Float#(PlayerArmor#/1)-monsters\dmg#)<0 Then
 AllDamageToPlayer#=Float#(PlayerArmor#/1)-monsters\dmg#
Else
 AllDamageToPlayer#=0
EndIf

зы если не понятно, могу объяснить что к чему.
полный исходник тут
игра тут + тут2 (на юкоз больше 15 мб не лезет пришлось разделить)

LLI.T.A.L.K.E.R. 07.09.2011 10:35

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от PackegerX (Сообщение 201537)
попробуй мою может натолкнет на мысль:
зы если не понятно, могу объяснить что к чему.
полный исходник тут
игра тут + тут2 (на юкоз больше 15 мб не лезет пришлось разделить)

Можно я внесу твою "игру" в мой полный сборник Blitz3D, в категорию Games
(я конечно же, всё же внесу, просто не хотелось чтобы думали, что авторство присвоил)

PackegerX 08.09.2011 12:32

Ответ: Система боя врага в РПГ
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 201542)
Можно я внесу твою "игру" в мой полный сборник Blitz3D, в категорию Games
(я конечно же, всё же внесу, просто не хотелось чтобы думали, что авторство присвоил)

конечно можно, че зря её писал и код открытый оставил)


Часовой пояс GMT +4, время: 03:29.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot