麻薯 bullet管理

master
chendian 10 months ago
parent 4ca24f708c
commit a1c0690e1c

@ -10,3 +10,4 @@ script = ExtResource("1_gwkwy")
shape = SubResource("CylinderShape3D_pmh6g") shape = SubResource("CylinderShape3D_pmh6g")
offset = Vector2(0, 0.5) offset = Vector2(0, 0.5)
is_throw = false is_throw = false
is_direct = false

@ -0,0 +1,9 @@
[gd_resource type="Resource" script_class="AttackBoxCfg" load_steps=2 format=3 uid="uid://bld0vhuhgydm8"]
[ext_resource type="Script" path="res://script/config/attack_box_cfg.gd" id="1_ymfge"]
[resource]
script = ExtResource("1_ymfge")
offset = Vector2(0, 0)
is_throw = false
is_direct = true

@ -23,3 +23,5 @@ attack = 10.0
attack1 = ExtResource("1_4vq22") attack1 = ExtResource("1_4vq22")
attack1_box = ExtResource("2_ewiqr") attack1_box = ExtResource("2_ewiqr")
sub_character_auto_create = false sub_character_auto_create = false
material_on = 0
material_off = 0

@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="CharacterCfg" load_steps=8 format=3 uid="uid://d3mafsovw1mko"]
[ext_resource type="Resource" uid="uid://ckbf40c75bfqf" path="res://config/attack/sharp_normal_hit_up.tres" id="1_at6jo"]
[ext_resource type="Resource" uid="uid://bld0vhuhgydm8" path="res://config/attack_box/direct.tres" id="2_780us"]
[ext_resource type="Resource" uid="uid://iv8g1x3bkxvv" path="res://config/character_move/fast_fly.tres" id="3_cx00u"]
[ext_resource type="Resource" uid="uid://dpajmgrlaytah" path="res://config/character_mp/normal.tres" id="4_alws1"]
[ext_resource type="Script" path="res://script/config/character_cfg.gd" id="5_4n1ni"]
[ext_resource type="Resource" uid="uid://h1curvk64vm3" path="res://config/character_shield/none.tres" id="6_u7wv4"]
[ext_resource type="Resource" uid="uid://5jes0p152akr" path="res://config/character_stun/none.tres" id="7_txgsx"]
[resource]
script = ExtResource("5_4n1ni")
name = "hero01"
type = 2
sprite_height = 26
sprite_width = 16
move = ExtResource("3_cx00u")
shield = ExtResource("6_u7wv4")
stun = ExtResource("7_txgsx")
mp = ExtResource("4_alws1")
hp_max = 100.0
attack = 10.0
attack1 = ExtResource("1_at6jo")
attack1_box = ExtResource("2_780us")
sub_character_auto_create = false
material_on = 0
material_off = 0

@ -22,6 +22,6 @@ mp = ExtResource("2_wo8op")
hp_max = 100.0 hp_max = 100.0
attack = 10.0 attack = 10.0
sub_character = ExtResource("7_vfx1h") sub_character = ExtResource("7_vfx1h")
sub_character_auto_create = false sub_character_auto_create = true
material_on = 0 material_on = 0
material_off = 0 material_off = 0

@ -20,7 +20,7 @@ shield = ExtResource("5_2xoig")
stun = ExtResource("6_ar00t") stun = ExtResource("6_ar00t")
mp = ExtResource("2_kkpsf") mp = ExtResource("2_kkpsf")
ai = ExtResource("1_lr20m") ai = ExtResource("1_lr20m")
hp_max = 100.0 hp_max = 1000.0
attack = 10.0 attack = 10.0
sub_character_auto_create = false sub_character_auto_create = false
material_on = 0 material_on = 0

@ -3,7 +3,7 @@
[ext_resource type="Script" path="res://script/config/skill_cfg.gd" id="1_doifq"] [ext_resource type="Script" path="res://script/config/skill_cfg.gd" id="1_doifq"]
[ext_resource type="Animation" uid="uid://h8hm3kbecdx8" path="res://resource/skill_animation/hero01_remote01.tres" id="2_h285p"] [ext_resource type="Animation" uid="uid://h8hm3kbecdx8" path="res://resource/skill_animation/hero01_remote01.tres" id="2_h285p"]
[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="3_w10pb"] [ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="3_w10pb"]
[ext_resource type="Resource" uid="uid://efaynwj7143w" path="res://config/character/bullet01.tres" id="4_bu37n"] [ext_resource type="Resource" uid="uid://d3mafsovw1mko" path="res://config/character/bullet02.tres" id="4_3k3a4"]
[resource] [resource]
script = ExtResource("1_doifq") script = ExtResource("1_doifq")
@ -12,12 +12,16 @@ skill_animation = ExtResource("2_h285p")
range = 0.0 range = 0.0
free_lock = false free_lock = false
ignore_push = false ignore_push = false
sub_character = ExtResource("4_bu37n") sub_character = ExtResource("4_3k3a4")
stance_from = 102 stance_from = 102
stance_to = 0 stance_to = 0
break_level = 3 break_level = 3
is_charging = false is_charging = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false
warn_type = 0
with_stop = false
is_lock_x = true
refresh_animation = false refresh_animation = false
sprite_frames = ExtResource("3_w10pb") sprite_frames = ExtResource("3_w10pb")
animation_name = "long_attack01" animation_name = "long_attack01"

@ -1,6 +1,5 @@
[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=5 format=3 uid="uid://cyqiiar75vf87"] [gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=4 format=3 uid="uid://cyqiiar75vf87"]
[ext_resource type="Resource" uid="uid://djuch6s4ycecd" path="res://config/skill_player_basic/hero01_basic_air_flash_back.tres" id="1_2dm0o"]
[ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="1_blorc"] [ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="1_blorc"]
[ext_resource type="Animation" uid="uid://73awn8b7c63v" path="res://resource/skill_animation/hero01_basic_air_flash.tres" id="2_sx5x4"] [ext_resource type="Animation" uid="uid://73awn8b7c63v" path="res://resource/skill_animation/hero01_basic_air_flash.tres" id="2_sx5x4"]
[ext_resource type="SpriteFrames" uid="uid://jpxh0jr8wp8g" path="res://resource/animation/character/hero01_basic.aseprite" id="3_ciqr7"] [ext_resource type="SpriteFrames" uid="uid://jpxh0jr8wp8g" path="res://resource/animation/character/hero01_basic.aseprite" id="3_ciqr7"]
@ -15,13 +14,13 @@ free_lock = true
ignore_push = true ignore_push = true
stance_from = 101 stance_from = 101
stance_to = 10 stance_to = 10
break_level = 1 break_level = 0
is_charging = false is_charging = false
mp_cost = 1 mp_cost = 0
mp_sub_cost = true
warn_type = 0 warn_type = 0
with_stop = false with_stop = false
is_lock_x = true is_lock_x = true
back_up_skill_cfg = ExtResource("1_2dm0o")
refresh_animation = false refresh_animation = false
sprite_frames = ExtResource("3_ciqr7") sprite_frames = ExtResource("3_ciqr7")
animation_name = "basic_air_flash" animation_name = "basic_air_flash"

@ -1,7 +1,6 @@
[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=5 format=3 uid="uid://cyqiiar75vf87"] [gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=4 format=3 uid="uid://cyqiiar75vf87"]
[ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="1_raqfe"] [ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="1_raqfe"]
[ext_resource type="Resource" uid="uid://copd3b35mo2vn" path="res://config/skill_player_basic/hero01_basic_flash_back.tres" id="1_rkdn8"]
[ext_resource type="Animation" uid="uid://cfapnjkj5dkws" path="res://resource/skill_animation/hero01_basic_flash.tres" id="2_31kka"] [ext_resource type="Animation" uid="uid://cfapnjkj5dkws" path="res://resource/skill_animation/hero01_basic_flash.tres" id="2_31kka"]
[ext_resource type="SpriteFrames" uid="uid://jpxh0jr8wp8g" path="res://resource/animation/character/hero01_basic.aseprite" id="3_i6jjr"] [ext_resource type="SpriteFrames" uid="uid://jpxh0jr8wp8g" path="res://resource/animation/character/hero01_basic.aseprite" id="3_i6jjr"]
@ -15,13 +14,13 @@ free_lock = true
ignore_push = true ignore_push = true
stance_from = 100 stance_from = 100
stance_to = 0 stance_to = 0
break_level = 1 break_level = 0
is_charging = false is_charging = false
mp_cost = 1 mp_cost = 0
mp_sub_cost = true
warn_type = 0 warn_type = 0
with_stop = false with_stop = false
is_lock_x = true is_lock_x = true
back_up_skill_cfg = ExtResource("1_rkdn8")
refresh_animation = false refresh_animation = false
sprite_frames = ExtResource("3_i6jjr") sprite_frames = ExtResource("3_i6jjr")
animation_name = "basic_flash" animation_name = "basic_flash"

@ -17,9 +17,10 @@ stance_to = 0
break_level = 1 break_level = 1
is_charging = false is_charging = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false
warn_type = 0 warn_type = 0
with_stop = false with_stop = false
is_lock_x = null is_lock_x = true
refresh_animation = false refresh_animation = false
sprite_frames = ExtResource("3_yxy1c") sprite_frames = ExtResource("3_yxy1c")
animation_name = "basic_flash" animation_name = "basic_flash"

@ -23,6 +23,7 @@ stance_to = 1
break_level = 3 break_level = 3
is_charging = false is_charging = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false
warn_type = 0 warn_type = 0
with_stop = false with_stop = false
is_lock_x = true is_lock_x = true

@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=7 format=3 uid="uid://dekpkk8o6o8hk"] [gd_resource type="Resource" script_class="SkillWeaponCfg" load_steps=7 format=3 uid="uid://dekpkk8o6o8hk"]
[ext_resource type="Resource" uid="uid://duu05cr8gk5v4" path="res://config/attack/blunt_mid_hit_blow.tres" id="1_am4eq"] [ext_resource type="Resource" uid="uid://c87w2x5qfqdns" path="res://config/attack/blunt_normal_hit_back.tres" id="1_2tlt3"]
[ext_resource type="Resource" uid="uid://bqejjllfy03h3" path="res://config/attack_box/box_normal.tres" id="2_7j3rd"] [ext_resource type="Resource" uid="uid://bqejjllfy03h3" path="res://config/attack_box/box_normal.tres" id="2_7j3rd"]
[ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="2_fde7v"] [ext_resource type="Script" path="res://script/config/skill_weapon_cfg.gd" id="2_fde7v"]
[ext_resource type="Animation" uid="uid://c6mk8tfdpniys" path="res://resource/skill_animation/hero01_fist_attack03.tres" id="3_6rajt"] [ext_resource type="Animation" uid="uid://c6mk8tfdpniys" path="res://resource/skill_animation/hero01_fist_attack03.tres" id="3_6rajt"]
@ -16,13 +16,17 @@ skill_animation = ExtResource("3_6rajt")
range = 0.0 range = 0.0
free_lock = false free_lock = false
ignore_push = false ignore_push = false
attack1 = ExtResource("1_am4eq") attack1 = ExtResource("1_2tlt3")
attack1_box = ExtResource("2_7j3rd") attack1_box = ExtResource("2_7j3rd")
stance_from = 2 stance_from = 2
stance_to = 3 stance_to = 3
break_level = 3 break_level = 3
is_charging = false is_charging = false
mp_cost = 0 mp_cost = 0
mp_sub_cost = false
warn_type = 0
with_stop = false
is_lock_x = true
refresh_animation = false refresh_animation = false
sprite_frames = ExtResource("4_orcy6") sprite_frames = ExtResource("4_orcy6")
animation_name = "fist_attack03" animation_name = "fist_attack03"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -37,82 +37,70 @@ tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.2, 0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [3, 4]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("Status:speed_up_rate") tracks/3/path = NodePath("Status:skill_move_speed")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [0.0, 0.0] "values": [7.0, 0.0]
} }
tracks/4/type = "value" tracks/4/type = "method"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Status:skill_move_speed") tracks/4/path = NodePath("Effect")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1),
"update": 1, "values": [{
"values": [8.0, 0.0] "args": [],
"method": &"cast_attack_particle1"
}]
} }
tracks/5/type = "method" tracks/5/type = "method"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("Effect") tracks/5/path = NodePath("Battle")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0.1), "times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"cast_attack_particle1" "method": &"stop"
}] }]
} }
tracks/6/type = "method" tracks/6/type = "value"
tracks/6/imported = false tracks/6/imported = false
tracks/6/enabled = true tracks/6/enabled = true
tracks/6/path = NodePath("Battle") tracks/6/path = NodePath("Status:is_speed_y_freeze")
tracks/6/interp = 1 tracks/6/interp = 1
tracks/6/loop_wrap = true tracks/6/loop_wrap = true
tracks/6/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1, 1),
"values": [{ "update": 1,
"args": [], "values": [true, false]
"method": &"stop"
}]
} }
tracks/7/type = "value" tracks/7/type = "value"
tracks/7/imported = false tracks/7/imported = false
tracks/7/enabled = true tracks/7/enabled = true
tracks/7/path = NodePath("Status:is_speed_y_freeze") tracks/7/path = NodePath("View:frame")
tracks/7/interp = 1 tracks/7/interp = 1
tracks/7/loop_wrap = true tracks/7/loop_wrap = true
tracks/7/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("View:frame")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7), "times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 1, "update": 1,

@ -49,7 +49,7 @@ tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 0.4, 0.5), "times": PackedFloat32Array(0, 0.2, 0.3),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [0, 3, 4]
@ -57,63 +57,51 @@ tracks/3/keys = {
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Status:speed_up_rate") tracks/4/path = NodePath("Status:skill_move_speed")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [-0.5, -0.5] "values": [6.0, 0.0]
} }
tracks/5/type = "value" tracks/5/type = "method"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = false
tracks/5/path = NodePath("Status:skill_move_speed") tracks/5/path = NodePath("Effect")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1),
"update": 1, "values": [{
"values": [4.0, 0.0] "args": [],
"method": &"cast_attack_particle1"
}]
} }
tracks/6/type = "method" tracks/6/type = "method"
tracks/6/imported = false tracks/6/imported = false
tracks/6/enabled = false tracks/6/enabled = true
tracks/6/path = NodePath("Effect") tracks/6/path = NodePath("Battle")
tracks/6/interp = 1 tracks/6/interp = 1
tracks/6/loop_wrap = true tracks/6/loop_wrap = true
tracks/6/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0.1), "times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"cast_attack_particle1" "method": &"stop"
}] }]
} }
tracks/7/type = "method" tracks/7/type = "value"
tracks/7/imported = false tracks/7/imported = false
tracks/7/enabled = true tracks/7/enabled = false
tracks/7/path = NodePath("Battle") tracks/7/path = NodePath("Status:is_speed_y_freeze")
tracks/7/interp = 1 tracks/7/interp = 1
tracks/7/loop_wrap = true tracks/7/loop_wrap = true
tracks/7/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"stop"
}]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = false
tracks/8/path = NodePath("Status:is_speed_y_freeze")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [true, false] "values": [true, false]

@ -37,82 +37,70 @@ tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.2, 0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [3, 4]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false tracks/3/imported = false
tracks/3/enabled = true tracks/3/enabled = true
tracks/3/path = NodePath("Status:speed_up_rate") tracks/3/path = NodePath("Status:skill_move_speed")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [0.0, 0.0] "values": [7.0, 0.0]
} }
tracks/4/type = "value" tracks/4/type = "method"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Status:skill_move_speed") tracks/4/path = NodePath("Effect")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1),
"update": 1, "values": [{
"values": [8.0, 0.0] "args": [],
"method": &"cast_attack_particle1"
}]
} }
tracks/5/type = "method" tracks/5/type = "method"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = true
tracks/5/path = NodePath("Effect") tracks/5/path = NodePath("Battle")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0.1), "times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"cast_attack_particle1" "method": &"stop"
}] }]
} }
tracks/6/type = "method" tracks/6/type = "value"
tracks/6/imported = false tracks/6/imported = false
tracks/6/enabled = true tracks/6/enabled = false
tracks/6/path = NodePath("Battle") tracks/6/path = NodePath("Status:is_speed_y_freeze")
tracks/6/interp = 1 tracks/6/interp = 1
tracks/6/loop_wrap = true tracks/6/loop_wrap = true
tracks/6/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1, 1),
"values": [{ "update": 1,
"args": [], "values": [true, false]
"method": &"stop"
}]
} }
tracks/7/type = "value" tracks/7/type = "value"
tracks/7/imported = false tracks/7/imported = false
tracks/7/enabled = false tracks/7/enabled = true
tracks/7/path = NodePath("Status:is_speed_y_freeze") tracks/7/path = NodePath("View:frame")
tracks/7/interp = 1 tracks/7/interp = 1
tracks/7/loop_wrap = true tracks/7/loop_wrap = true
tracks/7/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("View:frame")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7), "times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 1, "update": 1,

@ -49,7 +49,7 @@ tracks/3/path = NodePath("Status:break_level")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0, 0.4, 0.5), "times": PackedFloat32Array(0, 0.2, 0.3),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [0, 3, 4]
@ -57,63 +57,51 @@ tracks/3/keys = {
tracks/4/type = "value" tracks/4/type = "value"
tracks/4/imported = false tracks/4/imported = false
tracks/4/enabled = true tracks/4/enabled = true
tracks/4/path = NodePath("Status:speed_up_rate") tracks/4/path = NodePath("Status:skill_move_speed")
tracks/4/interp = 1 tracks/4/interp = 1
tracks/4/loop_wrap = true tracks/4/loop_wrap = true
tracks/4/keys = { tracks/4/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(-0.1, 0.2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [-0.5, -0.5] "values": [6.0, 0.0]
} }
tracks/5/type = "value" tracks/5/type = "method"
tracks/5/imported = false tracks/5/imported = false
tracks/5/enabled = true tracks/5/enabled = false
tracks/5/path = NodePath("Status:skill_move_speed") tracks/5/path = NodePath("Effect")
tracks/5/interp = 1 tracks/5/interp = 1
tracks/5/loop_wrap = true tracks/5/loop_wrap = true
tracks/5/keys = { tracks/5/keys = {
"times": PackedFloat32Array(0, 0.3), "times": PackedFloat32Array(0.1),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1),
"update": 1, "values": [{
"values": [4.0, 0.0] "args": [],
"method": &"cast_attack_particle1"
}]
} }
tracks/6/type = "method" tracks/6/type = "method"
tracks/6/imported = false tracks/6/imported = false
tracks/6/enabled = false tracks/6/enabled = true
tracks/6/path = NodePath("Effect") tracks/6/path = NodePath("Battle")
tracks/6/interp = 1 tracks/6/interp = 1
tracks/6/loop_wrap = true tracks/6/loop_wrap = true
tracks/6/keys = { tracks/6/keys = {
"times": PackedFloat32Array(0.1), "times": PackedFloat32Array(0.2),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"cast_attack_particle1" "method": &"stop"
}] }]
} }
tracks/7/type = "method" tracks/7/type = "value"
tracks/7/imported = false tracks/7/imported = false
tracks/7/enabled = true tracks/7/enabled = false
tracks/7/path = NodePath("Battle") tracks/7/path = NodePath("Status:is_speed_y_freeze")
tracks/7/interp = 1 tracks/7/interp = 1
tracks/7/loop_wrap = true tracks/7/loop_wrap = true
tracks/7/keys = { tracks/7/keys = {
"times": PackedFloat32Array(0.3), "times": PackedFloat32Array(0, 0.2),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"stop"
}]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = false
tracks/8/path = NodePath("Status:is_speed_y_freeze")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0, 0.3),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [true, false] "values": [true, false]

@ -37,7 +37,7 @@ tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.3, 0.5), "times": PackedFloat32Array(0, 0.2, 0.5),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [0, 3, 4]

@ -5,6 +5,7 @@
[resource] [resource]
resource_name = "hero01_fist_attack03" resource_name = "hero01_fist_attack03"
length = 0.8 length = 0.8
step = 0.1
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
@ -36,7 +37,7 @@ tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.4, 0.6), "times": PackedFloat32Array(0, 0.3, 0.6),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [0, 3, 4]

@ -5,6 +5,7 @@
[resource] [resource]
resource_name = "hero01_fist_attack04" resource_name = "hero01_fist_attack04"
length = 1.1 length = 1.1
step = 0.1
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
@ -36,7 +37,7 @@ tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.8, 1), "times": PackedFloat32Array(0, 0.6, 0.9),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [0, 3, 4]

@ -37,7 +37,7 @@ tracks/2/path = NodePath("Status:break_level")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0, 0.9, 1.1), "times": PackedFloat32Array(0, 0.8, 1),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 1, "update": 1,
"values": [0, 3, 4] "values": [0, 3, 4]

@ -2,27 +2,22 @@
[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_go1b5"] [ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_go1b5"]
[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="2_k8nph"] [ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="2_k8nph"]
[ext_resource type="Script" path="res://script/ai/action/action_wait.gd" id="3_xg7xh"] [ext_resource type="Script" path="res://script/ai/action/action_stop_move.gd" id="3_aums8"]
[ext_resource type="Script" path="res://script/ai/action/action_attack1.gd" id="4_mhoc5"] [ext_resource type="Script" path="res://script/ai/action/action_attack1.gd" id="4_mhoc5"]
[ext_resource type="Script" path="res://script/ai/action/action_destroy.gd" id="5_ejojh"] [ext_resource type="Script" path="res://script/ai/action/action_destroy.gd" id="5_ejojh"]
[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")] [node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard")]
script = ExtResource("1_go1b5") script = ExtResource("1_go1b5")
blackboard = NodePath("@Node@82296") blackboard = NodePath("@Node@37355")
[node name="SequenceComposite" type="Node" parent="."] [node name="SequenceComposite" type="Node" parent="."]
script = ExtResource("2_k8nph") script = ExtResource("2_k8nph")
[node name="ActionWait2" type="Node" parent="SequenceComposite"] [node name="ActionStopMove" type="Node" parent="SequenceComposite"]
script = ExtResource("3_xg7xh") script = ExtResource("3_aums8")
wait_time = 0.1
[node name="ActionAttack1" type="Node" parent="SequenceComposite"] [node name="ActionAttack1" type="Node" parent="SequenceComposite"]
script = ExtResource("4_mhoc5") script = ExtResource("4_mhoc5")
[node name="ActionWait" type="Node" parent="SequenceComposite"]
script = ExtResource("3_xg7xh")
wait_time = 0.1
[node name="ActionDestroy" type="Node" parent="SequenceComposite"] [node name="ActionDestroy" type="Node" parent="SequenceComposite"]
script = ExtResource("5_ejojh") script = ExtResource("5_ejojh")

@ -104,7 +104,7 @@ metadata/_editor_floor_ = Vector3(0, 1, 0)
[node name="BornPos" type="Node3D" parent="."] [node name="BornPos" type="Node3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.9576, 1.38269, 81.6733) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.69887, 1.38269, 81.6733)
[node name="Levels" type="Node3D" parent="."] [node name="Levels" type="Node3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true

@ -18,4 +18,4 @@ const weapon_anime_duration: float = 0.1
#pt #pt
const pt_mp_damage_rate: float = 0.5 const pt_mp_damage_rate: float = 0.5
const pt_mp_break_or_kill: int = 100 const pt_mp_break_or_kill: int = 100
const pt_hp_break_or_kill: int = 5 const pt_hp_break_or_kill: int = 5

@ -19,6 +19,7 @@ func _process(delta) -> void:
update_skill() update_skill()
update_skill_move() update_skill_move()
update_move() update_move()
update_bullet()
func update_skill() -> void: func update_skill() -> void:
@ -28,17 +29,25 @@ func update_skill() -> void:
if not skill_order: if not skill_order:
return return
var skill_cfg: SkillCfg = skill_order.skill_cfg var skill_cfg: SkillCfg = skill_order.skill_cfg
var cast_dir: Vector2 = skill_order.cast_dir if skill_order.cast_dir else Vector2.RIGHT if skill_cfg.sub_character and skill_cfg.sub_character.type == Enum.ECharacterType.Bullet:
status.target = skill_order.target var bullet_order: Status.BulletOrder = Status.BulletOrder.new()
var target: Character = Global.character_mgr.get_character(status.target) bullet_order.bullet_cfg = skill_cfg.sub_character
if target: bullet_order.cast_dir = skill_order.cast_dir
cast_dir = character.pos2D().direction_to(target.pos2D()).normalized() bullet_order.target = skill_order.target
#施放技能条件检查 status.ai_bullet_order.append(bullet_order)
if not skill.cast_skill_check(skill_cfg, status.break_level): status.ai_skill_order.remove_at(0)
return else:
character.move_to(cast_dir) var cast_dir: Vector2 = skill_order.cast_dir if skill_order.cast_dir else Vector2.RIGHT
skill.cast_skill(skill_cfg, cast_dir) status.target = skill_order.target
status.ai_skill_order.remove_at(0) var target: Character = Global.character_mgr.get_character(status.target)
if target:
cast_dir = character.pos2D().direction_to(target.pos2D()).normalized()
#施放技能条件检查
if not skill.cast_skill_check(skill_cfg, status.break_level):
return
character.move_to(cast_dir)
skill.cast_skill(skill_cfg, cast_dir)
status.ai_skill_order.remove_at(0)
func update_skill_move() -> void: func update_skill_move() -> void:
@ -56,6 +65,20 @@ func update_skill_move() -> void:
character.move_to(dir) character.move_to(dir)
func update_bullet() -> void:
if not status.ai_bullet_order:
return
var bullet_order: Status.BulletOrder = status.ai_bullet_order[0]
if not bullet_order:
return
var pos: Vector3 = character.pos()
var dir: Vector2 = bullet_order.cast_dir
var sub: Character = Global.character_mgr.create_character(bullet_order.bullet_cfg, status.team, pos, dir, status.id)
if sub:
sub.set_status("target", bullet_order.target)
status.ai_bullet_order.remove_at(0)
func update_move() -> void: func update_move() -> void:
if status.is_skill_running: if status.is_skill_running:
return return

@ -54,6 +54,10 @@ func add_attack(attack: AttackCfg, attack_box: AttackBoxCfg, hit_self: bool = fa
var target: Character = Global.character_mgr.get_character(status.throw_target) var target: Character = Global.character_mgr.get_character(status.throw_target)
if target: if target:
result = [target] result = [target]
elif attack_box.is_direct:
var target: Character = Global.character_mgr.get_character(status.target)
if target:
result = [target]
else: else:
var offset_xz: Vector2 = attack_dir * attack_box.offset.x var offset_xz: Vector2 = attack_dir * attack_box.offset.x
var offset_y: float = attack_box.offset.y var offset_y: float = attack_box.offset.y
@ -187,8 +191,8 @@ func settle(from: int, to: int, dir: Vector2, attack: AttackCfg) -> HitResult:
character_to.add_buff("stun_recover_cd", cfg_to.stun.recover_cd) character_to.add_buff("stun_recover_cd", cfg_to.stun.recover_cd)
#mp累加 #mp累加
# if not is_bullet: if not is_bullet:
# character_from.add_mp_sub(damage * cfg_from.mp.add_rate_attack, true) character_from.add_mp_sub(damage * cfg_from.mp.add_rate_attack, true)
character_to.add_mp_sub(damage * cfg_to.mp.add_rate_hit, true) character_to.add_mp_sub(damage * cfg_to.mp.add_rate_hit, true)
#被动锁定目标转移 #被动锁定目标转移
@ -369,6 +373,10 @@ func cost_mp(value: int):
character.remove_buff("mp_recover") character.remove_buff("mp_recover")
character.add_buff("mp_recover_cd", status.cfg.mp.recover_cd) character.add_buff("mp_recover_cd", status.cfg.mp.recover_cd)
func cost_mp_sub():
character.set_status("mp_sub", 0)
character.remove_buff("mp_recover")
character.add_buff("mp_recover_cd", status.cfg.mp.recover_cd)
func check_ground(): skill.on_check_ground(0) func check_ground(): skill.on_check_ground(0)

@ -196,6 +196,9 @@ func add_hp(value: float):
func cost_mp(value: int): func cost_mp(value: int):
battle.cost_mp(value) battle.cost_mp(value)
func cost_mp_sub():
battle.cost_mp_sub()
func set_effect_lock(value: bool): func set_effect_lock(value: bool):
effect.set_effect_lock(value) effect.set_effect_lock(value)

@ -70,7 +70,7 @@ func update_break():
if break_level <= status.break_level: if break_level <= status.break_level:
var is_break: bool = false var is_break: bool = false
match break_level: match break_level:
Enum.EBreakLevel.None: pass Enum.EBreakLevel.None: is_break = update_break_none()
Enum.EBreakLevel.Cancel: is_break = update_break_cancel() Enum.EBreakLevel.Cancel: is_break = update_break_cancel()
Enum.EBreakLevel.Jump: is_break = update_break_jump() Enum.EBreakLevel.Jump: is_break = update_break_jump()
Enum.EBreakLevel.Break: is_break = update_break_break() Enum.EBreakLevel.Break: is_break = update_break_break()
@ -78,6 +78,9 @@ func update_break():
if is_break: if is_break:
break break
func update_break_none() -> bool:
return update_break_by_level(Enum.EBreakLevel.None)
func update_break_cancel() -> bool: func update_break_cancel() -> bool:
return update_break_by_level(Enum.EBreakLevel.Cancel) return update_break_by_level(Enum.EBreakLevel.Cancel)
@ -116,12 +119,15 @@ func update_break_by_level(break_level: Enum.EBreakLevel) -> bool:
else: else:
if input.action in skill.skill_map: if input.action in skill.skill_map:
for skill_cfg: SkillCfg in skill.skill_map[input.action]: for skill_cfg: SkillCfg in skill.skill_map[input.action]:
#释放技能扣除mp检查
var skill_cfg_with_cost: SkillCfg = skill.cast_skill_mp_cost_check(skill_cfg)
if not skill_cfg_with_cost:
continue
#施放技能条件检查 #施放技能条件检查
if not skill.cast_skill_check(skill_cfg, break_level): if not skill.cast_skill_check(skill_cfg_with_cost, break_level):
continue continue
#施放技能扣除mp #施放技能扣除mp
var skill_cfg_with_cost: SkillCfg = skill.cast_skill_mp_cost(skill_cfg) if not skill.cast_skill_mp_cost(skill_cfg_with_cost):
if not skill_cfg_with_cost:
continue continue
skill.cast_skill(skill_cfg_with_cost, status.input_dir, input.action) skill.cast_skill(skill_cfg_with_cost, status.input_dir, input.action)
refresh_input(i) refresh_input(i)

@ -40,6 +40,15 @@ func _on_animation_finished(_anim_name):
cancel_skill() cancel_skill()
func cast_skill_mp_cost_check(cfg: SkillCfg) -> SkillCfg:
if status.mp < cfg.mp_cost:
#todo mp不足
return null
if status.mp_sub == 0 and cfg.mp_sub_cost:
return null
return cfg
func cast_skill_check(cfg: SkillCfg, break_level: Enum.EBreakLevel = Enum.EBreakLevel.Break) -> bool: func cast_skill_check(cfg: SkillCfg, break_level: Enum.EBreakLevel = Enum.EBreakLevel.Break) -> bool:
var animation_name: String = "animation_library/%s" % cfg.get_res_name() var animation_name: String = "animation_library/%s" % cfg.get_res_name()
if not has_animation(animation_name): if not has_animation(animation_name):
@ -47,7 +56,7 @@ func cast_skill_check(cfg: SkillCfg, break_level: Enum.EBreakLevel = Enum.EBreak
return false return false
if current_animation: if current_animation:
var pos_offset = fmod(current_animation_position,0.1) var pos_offset = fmod(current_animation_position, 0.1)
if pos_offset < 0.02 or pos_offset > 0.08: if pos_offset < 0.02 or pos_offset > 0.08:
return false return false
@ -69,14 +78,17 @@ func cast_skill_check(cfg: SkillCfg, break_level: Enum.EBreakLevel = Enum.EBreak
return true return true
func cast_skill_mp_cost(cfg: SkillCfg) -> SkillCfg: func cast_skill_mp_cost(cfg: SkillCfg) -> bool:
if status.mp < cfg.mp_cost: if status.mp < cfg.mp_cost:
#todo mp不足 #todo mp不足
if cfg.back_up_skill_cfg: return false
return cast_skill_mp_cost(cfg.back_up_skill_cfg) if status.mp_sub == 0 and cfg.mp_sub_cost:
return null return false
character.cost_mp(cfg.mp_cost) if cfg.mp_cost:
return cfg character.cost_mp(cfg.mp_cost)
if cfg.mp_sub_cost:
character.cost_mp_sub()
return true
func cast_skill_by_name(name: String, cast_dir: Vector2): func cast_skill_by_name(name: String, cast_dir: Vector2):
@ -215,6 +227,8 @@ func on_cast_sub_character() -> void:
var cfg: SkillCfg = status.skill_cfg var cfg: SkillCfg = status.skill_cfg
if not cfg or not cfg.sub_character: if not cfg or not cfg.sub_character:
return return
var pos: Vector3 = character.pos() var pos: Vector3 = character.pos()
var dir: Vector2 = status.skill_dir var dir: Vector2 = status.skill_dir
Global.character_mgr.create_character(cfg.sub_character, status.team, pos, dir, status.id) var sub: Character = Global.character_mgr.create_character(cfg.sub_character, status.team, pos, dir, status.id)
if sub:
sub.set_status("target", status.target)

@ -6,6 +6,11 @@ class SkillOrder:
var cast_dir: Vector2 var cast_dir: Vector2
var target: int var target: int
class BulletOrder:
var bullet_cfg: CharacterCfg
var cast_dir: Vector2
var target: int
#实体属性 #实体属性
var id: int #id var id: int #id
var owner_id: int #所有者id var owner_id: int #所有者id
@ -92,6 +97,7 @@ var charging_level: int #蓄力等级
#ai状态 #ai状态
var ai_role: int #ai角色 var ai_role: int #ai角色
var ai_skill_order: Array[SkillOrder] = [] #ai技能指令 var ai_skill_order: Array[SkillOrder] = [] #ai技能指令
var ai_bullet_order: Array[BulletOrder] = [] #ai子弹指令
var ai_alert_max: float #警戒值最大值 var ai_alert_max: float #警戒值最大值
var ai_alert: float #警戒值 var ai_alert: float #警戒值
var ai_is_alert: bool #是否已激活 var ai_is_alert: bool #是否已激活

@ -4,3 +4,4 @@ class_name AttackBoxCfg
@export var shape: Shape3D @export var shape: Shape3D
@export var offset: Vector2 #偏移 @export var offset: Vector2 #偏移
@export var is_throw: bool #是否投技(只命中投技目标) @export var is_throw: bool #是否投技(只命中投技目标)
@export var is_direct: bool #是否直接命中

@ -17,10 +17,10 @@ class_name SkillCfg
@export var break_level: Enum.EBreakLevel = Enum.EBreakLevel.Break @export var break_level: Enum.EBreakLevel = Enum.EBreakLevel.Break
@export var is_charging: bool @export var is_charging: bool
@export var mp_cost: int @export var mp_cost: int
@export var mp_sub_cost: bool
@export var warn_type: Enum.ESkillWarnType = Enum.ESkillWarnType.None @export var warn_type: Enum.ESkillWarnType = Enum.ESkillWarnType.None
@export var with_stop: bool = false @export var with_stop: bool = false
@export var is_lock_x: bool = true @export var is_lock_x: bool = true
@export var back_up_skill_cfg: SkillCfg
@export var refresh_animation: bool: @export var refresh_animation: bool:
get: return false get: return false

Loading…
Cancel
Save