diff --git a/bin/game b/bin/game index 98ae70c..53f8690 100755 --- a/bin/game +++ b/bin/game @@ -12,9 +12,8 @@ if (file_exists(__DIR__ . '/../vendor/autoload.php')) { require 'phar://hanli-idle.phar/vendor/autoload.php'; } +use Game\Console\ConsoleOutput; use Game\Core\Input; -use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Console\Output\ConsoleOutput; use Game\Core\Game; // 设置终端为 UTF-8 diff --git a/save.json b/save.json index ffc1d0e..bcfe737 100644 --- a/save.json +++ b/save.json @@ -1 +1 @@ -{"player":{"hp":76,"maxHp":100,"patk":10,"matk":10,"pdef":10,"mdef":10,"crit":0,"critdmg":110,"level":9,"exp":953,"potionPool":0,"maxExp":1729,"inventory":[{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":37,"crit":6,"critdmg":0,"affixes":["魔防 +7","物防 +8"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693aca26048ae","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"legendary","level":1,"patk":0,"matk":0,"pdef":12,"mdef":0,"hp":44,"crit":0,"critdmg":4,"affixes":["暴击伤害 +4%","魔防 +6%","生命值 +7%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad52222fbe","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"rare","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":37,"crit":0,"critdmg":9,"affixes":["暴击伤害 +7%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad53a3b9c4","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"rare","level":1,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":23,"crit":0,"critdmg":0,"affixes":["魔防 +2%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad53a3b9cf","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"rare","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":37,"crit":4,"critdmg":0,"affixes":["物防 +3"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad59ee8348","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":4,"critdmg":7,"affixes":["物攻 +3%","暴击率 +6"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693ad59ee834c","quantity":1},{"name":"青锋剑","type":"weapon","enhanceLevel":0,"quality":"rare","level":2,"patk":12,"matk":12,"pdef":0,"mdef":0,"hp":0,"crit":9,"critdmg":0,"affixes":["暴击伤害 +2"],"desc":"七玄门江湖利器,锋锐轻快,乃凡人武者梦寐以求的神兵。","id":"693ad5aa2ec41","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"rare","level":1,"patk":0,"matk":5,"pdef":0,"mdef":0,"hp":0,"crit":4,"critdmg":0,"affixes":["物攻 +8%"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693ad5b5b5738","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":4,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":12,"critdmg":8,"affixes":["暴击率 +8%","物攻 +7"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693ad5d62ebde","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"rare","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":9,"critdmg":0,"affixes":["物攻 +7%"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693ad60b8ff2f","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"rare","level":3,"patk":0,"matk":0,"pdef":7,"mdef":0,"hp":56,"crit":0,"critdmg":0,"affixes":["暴击率 +4%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad64068348","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"rare","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":57,"crit":0,"critdmg":0,"affixes":["暴击率 +3"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad6772b739","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"rare","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":57,"crit":0,"critdmg":0,"affixes":["物防 +5%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad695dd93f","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"rare","level":1,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":26,"crit":0,"critdmg":7,"affixes":["生命值 +8"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad6d875dd1","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":3,"patk":0,"matk":0,"pdef":0,"mdef":9,"hp":45,"crit":0,"critdmg":0,"affixes":["暴击伤害 +4%","物防 +7%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad6ee76aa5","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"epic","level":4,"patk":0,"matk":0,"pdef":12,"mdef":0,"hp":113,"crit":0,"critdmg":0,"affixes":["物防 +5%","生命值 +8%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad7645ebe7","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":8,"hp":57,"crit":0,"critdmg":0,"affixes":["暴击率 +6","生命值 +35"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad8036d0c0","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"rare","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":61,"crit":0,"critdmg":0,"affixes":["物防 +4%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad8036d0c6","quantity":1},{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"rare","level":1,"patk":11,"matk":0,"pdef":0,"mdef":0,"hp":18,"crit":0,"critdmg":0,"affixes":["魔防 +5%"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693ad82061a32","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":6,"mdef":0,"hp":40,"crit":0,"critdmg":0,"affixes":["物防 +5","生命值 +2%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad8469cc0f","quantity":1},{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"common","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":62,"crit":0,"critdmg":0,"affixes":[],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693adb6aba031","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"epic","level":1,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":42,"crit":6,"critdmg":0,"affixes":["魔防 +2%","生命值 +5%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693adb77c0a6c","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"rare","level":1,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":9,"critdmg":0,"affixes":["暴击率 +3"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693adb81e96a6","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"rare","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":94,"crit":5,"critdmg":0,"affixes":["暴击率 +4"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693adbd16c87d","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":3,"critdmg":0,"affixes":[],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693adbd16c883","quantity":1},{"name":"青锋剑","type":"weapon","enhanceLevel":0,"quality":"common","level":8,"patk":19,"matk":16,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":0,"affixes":[],"desc":"七玄门江湖利器,锋锐轻快,乃凡人武者梦寐以求的神兵。","id":"693adbd16c885","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":117,"crit":0,"critdmg":0,"affixes":[],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693adbd16c886","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":7,"critdmg":0,"affixes":[],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693adbd16c887","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":168,"crit":0,"critdmg":0,"affixes":[],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693adbd16c888","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"common","level":1,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":18,"crit":0,"critdmg":0,"affixes":[],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693adbef303b9","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"rare","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":163,"crit":0,"critdmg":12,"affixes":["暴击伤害 +10%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693adbef303bf","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":89,"crit":0,"critdmg":0,"affixes":[],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693adc024265a","quantity":1},{"name":"青锋剑","type":"weapon","enhanceLevel":0,"quality":"common","level":8,"patk":15,"matk":19,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":0,"affixes":[],"desc":"七玄门江湖利器,锋锐轻快,乃凡人武者梦寐以求的神兵。","id":"693adc290e13a","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":105,"crit":0,"critdmg":0,"affixes":[],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693adc290e13e","quantity":1},{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"common","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":152,"crit":0,"critdmg":0,"affixes":[],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693adc290e142","quantity":1},{"name":"青锋剑","type":"weapon","enhanceLevel":0,"quality":"common","level":1,"patk":9,"matk":4,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":0,"affixes":[],"desc":"七玄门江湖利器,锋锐轻快,乃凡人武者梦寐以求的神兵。","id":"693adc2d2a2d2","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"rare","level":1,"patk":0,"matk":11,"pdef":0,"mdef":0,"hp":0,"crit":7,"critdmg":0,"affixes":["魔攻 +2"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693adc2d2a2d7","quantity":1}],"equip":{"weapon":{"name":"青锋剑","type":"weapon","enhanceLevel":0,"quality":"rare","level":3,"patk":16,"matk":12,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":0,"affixes":["暴击率 +3"],"desc":"七玄门江湖利器,锋锐轻快,乃凡人武者梦寐以求的神兵。","id":"693ad36049f77","quantity":1},"boots":{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"epic","level":4,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":96,"crit":11,"critdmg":0,"affixes":["生命值 +9%","暴击率 +6"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad73fe2ff0","quantity":1},"armor":{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"rare","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":201,"crit":0,"critdmg":0,"affixes":["物防 +5%"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693ad786e550e","quantity":1},"necklace":{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":69,"crit":0,"critdmg":8,"affixes":["物防 +5","魔防 +9"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad4332b096","quantity":1},"ring":{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":3,"patk":0,"matk":18,"pdef":0,"mdef":0,"hp":0,"crit":7,"critdmg":0,"affixes":["物攻 +9%","暴击率 +3"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693ad3781ba9a","quantity":1}},"spiritStones":1783,"npcFlags":[],"talentPoints":3,"talents":{"hp":9,"patk":12,"matk":0,"pdef":0,"mdef":0,"crit":0,"critdmg":0},"mana":60,"maxMana":60,"skillSlots":{"skill1":null,"skill2":null,"skill3":null,"skill4":null},"partners":[{"id":"li_feiyu","name":"厉飞雨","level":8,"exp":576,"maxExp":1412,"equip":{"weapon":{"name":"青锋剑","type":"weapon","enhanceLevel":0,"quality":"rare","level":2,"patk":13,"matk":13,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":0,"affixes":["暴击伤害 +3"],"desc":"七玄门江湖利器,锋锐轻快,乃凡人武者梦寐以求的神兵。","id":"693ad4753bb91","quantity":1},"boots":{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"rare","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":148,"crit":0,"critdmg":0,"affixes":["暴击率 +8%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693ad786e5512","quantity":1},"ring":{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":4,"critdmg":3,"affixes":["暴击伤害 +4","暴击率 +7%"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693ad53f717b7","quantity":1},"necklace":{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"rare","level":3,"patk":0,"matk":0,"pdef":0,"mdef":10,"hp":80,"crit":0,"critdmg":0,"affixes":["暴击率 +9%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693ad45f84f12","quantity":1},"armor":{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"rare","level":8,"patk":0,"matk":0,"pdef":0,"mdef":19,"hp":113,"crit":0,"critdmg":0,"affixes":["物防 +12"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693ad7f49b1b2","quantity":1}},"talents":{"hp":7,"patk":7,"matk":0,"pdef":0,"mdef":0,"crit":7,"critdmg":0},"talentWeights":{"hp":1,"patk":3,"matk":1,"pdef":1,"mdef":1,"crit":3,"critdmg":2},"mana":100,"maxMana":100,"skillSlots":{"skill1":null,"skill2":null,"skill3":null,"skill4":null},"hp":189,"maxHp":100,"patk":15,"matk":5,"pdef":5,"mdef":3,"crit":10,"critdmg":130}]},"dungeonId":1,"state":2} \ No newline at end of file +{"player":{"hp":158,"maxHp":100,"patk":10,"matk":10,"pdef":5,"mdef":5,"crit":0,"critdmg":110,"level":18,"exp":1737,"potionPool":48175,"maxExp":7732,"inventory":[{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":45,"crit":0,"critdmg":5,"affixes":["生命值 +37","暴击率 +4%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693b7c5a6bca0","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":12,"critdmg":8,"affixes":["暴击伤害 +7","暴击率 +2"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693b7cedd43c7","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":1,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":33,"crit":0,"critdmg":12,"affixes":["物防 +4","生命值 +16"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693b80ef7b6b0","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":4,"critdmg":11,"affixes":["暴击伤害 +6%","物攻 +4%"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693b810d76570","quantity":1},{"name":"草上飞","type":"boots","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":10,"mdef":0,"hp":34,"crit":0,"critdmg":0,"affixes":["物防 +7","生命值 +4%"],"desc":"轻便的布靴,习武之人常年穿戴,便于施展轻功提纵之术。","id":"693b84ea7b4dd","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":3,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":50,"crit":0,"critdmg":9,"affixes":["生命值 +45","暴击率 +4"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693b850085c3b","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":8,"patk":0,"matk":27,"pdef":0,"mdef":0,"hp":0,"crit":8,"critdmg":0,"affixes":["魔攻 +16","物攻 +18"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693b884bd0647","quantity":1},{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":13,"pdef":0,"mdef":0,"hp":66,"crit":0,"critdmg":0,"affixes":["生命值 +33","物攻 +5"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693b8a1c0dbab","quantity":1},{"id":"693bb145673bc","type":"quest_item","name":"升仙令","quality":"legendary","level":1,"quantity":1,"desc":"关键任务物品,用于解锁新区域"},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"epic","level":3,"patk":11,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":4,"critdmg":0,"affixes":["暴击伤害 +8%","物攻 +6"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693bb24610865","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"epic","level":2,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":42,"crit":0,"critdmg":6,"affixes":["生命值 +43","物防 +6%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693bb24f37d99","quantity":1},{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"epic","level":1,"patk":0,"matk":0,"pdef":10,"mdef":0,"hp":28,"crit":0,"critdmg":0,"affixes":["生命值 +17","魔防 +8%"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693bb3e82a27d","quantity":1},{"id":"693bb404869b0","type":"quest_item","name":"升仙令","quality":"legendary","level":1,"quantity":1,"desc":"关键任务物品,用于解锁新区域"},{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"epic","level":7,"patk":0,"matk":25,"pdef":0,"mdef":0,"hp":0,"crit":3,"critdmg":0,"affixes":["暴击率 +5%","魔攻 +17"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bb51b1fd26","quantity":1},{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":7,"patk":31,"matk":0,"pdef":0,"mdef":0,"hp":113,"crit":0,"critdmg":0,"affixes":["生命值 +6%","物防 +15"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bb5ae5c2d9","quantity":1},{"name":"神行靴","type":"boots","enhanceLevel":0,"quality":"epic","level":7,"patk":0,"matk":0,"pdef":0,"mdef":20,"hp":108,"crit":0,"critdmg":0,"affixes":["魔防 +5%","生命值 +110"],"desc":"刻画了基础轻身符文的靴子,能小幅提升移动速度。","id":"693bb62bba78d","quantity":1},{"name":"掌门指环","type":"ring","enhanceLevel":0,"quality":"legendary","level":2,"patk":14,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":16,"critdmg":12,"affixes":["暴击率 +5","物攻 +4%","暴击伤害 +5"],"desc":"七玄门掌门信物,象征凡俗权力,对修仙者而言并无灵力。","id":"693bb9d0202f6","quantity":1},{"name":"平安符","type":"necklace","enhanceLevel":0,"quality":"legendary","level":3,"patk":0,"matk":0,"pdef":0,"mdef":22,"hp":112,"crit":0,"critdmg":17,"affixes":["物防 +4%","魔防 +12","生命值 +9%"],"desc":"亲人求来的普通符箓,寄托思念,是韩立离家时的随身之物。","id":"693bb9e6c22ea","quantity":1},{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"epic","level":9,"patk":25,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":3,"critdmg":0,"affixes":["魔攻 +20","暴击率 +7"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bbabf0a250","quantity":1},{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"epic","level":10,"patk":0,"matk":39,"pdef":0,"mdef":0,"hp":0,"crit":13,"critdmg":0,"affixes":["物攻 +11%","暴击率 +6%"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bbd7a5ddd8","quantity":1},{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":10,"patk":31,"matk":0,"pdef":0,"mdef":0,"hp":160,"crit":0,"critdmg":0,"affixes":["魔防 +19","生命值 +6%"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bbf17ab377","quantity":1},{"name":"棉铁内甲","type":"armor","enhanceLevel":0,"quality":"epic","level":8,"patk":0,"matk":28,"pdef":0,"mdef":0,"hp":175,"crit":0,"critdmg":0,"affixes":["魔攻 +6%","魔防 +15"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693bc1ba49998","quantity":1},{"name":"神行靴","type":"boots","enhanceLevel":0,"quality":"epic","level":9,"patk":0,"matk":0,"pdef":21,"mdef":0,"hp":195,"crit":0,"critdmg":0,"affixes":["暴击率 +9%","物防 +10"],"desc":"刻画了基础轻身符文的靴子,能小幅提升移动速度。","id":"693bc1c6a0986","quantity":1},{"name":"飞行符","type":"weapon","enhanceLevel":0,"quality":"epic","level":10,"patk":39,"matk":36,"pdef":0,"mdef":0,"hp":150,"crit":0,"critdmg":0,"affixes":["物攻 +9%","魔攻 +10%"],"desc":"低阶修士常用代步工具,注入微薄法力即可贴地滑行。","id":"693bc5201757a","quantity":1},{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":11,"patk":0,"matk":0,"pdef":26,"mdef":0,"hp":294,"crit":0,"critdmg":0,"affixes":["魔防 +5%","生命值 +190"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bc55f7e6b7","quantity":1},{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":12,"patk":0,"matk":0,"pdef":0,"mdef":28,"hp":298,"crit":0,"critdmg":0,"affixes":["魔防 +17","物防 +21"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bc76dbcaa8","quantity":1},{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":10,"patk":0,"matk":39,"pdef":0,"mdef":0,"hp":183,"crit":0,"critdmg":0,"affixes":["魔攻 +5%","魔防 +7%"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bc911527a3","quantity":1},{"name":"飞行符","type":"weapon","enhanceLevel":0,"quality":"epic","level":12,"patk":38,"matk":43,"pdef":0,"mdef":0,"hp":170,"crit":0,"critdmg":0,"affixes":["物攻 +12%","暴击率 +2"],"desc":"低阶修士常用代步工具,注入微薄法力即可贴地滑行。","id":"693bcab1d6933","quantity":1},{"name":"神行靴","type":"boots","enhanceLevel":0,"quality":"epic","level":8,"patk":0,"matk":0,"pdef":24,"mdef":0,"hp":133,"crit":0,"critdmg":0,"affixes":["物防 +12","魔防 +14"],"desc":"刻画了基础轻身符文的靴子,能小幅提升移动速度。","id":"693bcbf9a36ee","quantity":1},{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"epic","level":12,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":6,"critdmg":15,"affixes":["暴击伤害 +7","魔攻 +19"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bcc076b554","quantity":1},{"id":"693bd2743e337","type":"quest_item","name":"古传送阵残图","quality":"legendary","level":1,"quantity":1,"desc":"关键任务物品,用于解锁新区域"},{"name":"飞行符","type":"weapon","enhanceLevel":0,"quality":"epic","level":12,"patk":36,"matk":43,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":14,"affixes":["魔攻 +23","暴击率 +10%"],"desc":"低阶修士常用代步工具,注入微薄法力即可贴地滑行。","id":"693bd36818cc7","quantity":1},{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":10,"patk":0,"matk":0,"pdef":30,"mdef":0,"hp":267,"crit":0,"critdmg":0,"affixes":["物防 +14","魔防 +9%"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bd370ef33a","quantity":1},{"name":"神行靴","type":"boots","enhanceLevel":0,"quality":"epic","level":12,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":197,"crit":9,"critdmg":0,"affixes":["生命值 +165","暴击率 +11%"],"desc":"刻画了基础轻身符文的靴子,能小幅提升移动速度。","id":"693bd37ca3734","quantity":1},{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"epic","level":10,"patk":33,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":10,"critdmg":0,"affixes":["暴击率 +7","暴击伤害 +6%"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bd39f746e6","quantity":1},{"name":"安神香囊","type":"necklace","enhanceLevel":0,"quality":"epic","level":10,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":312,"crit":0,"critdmg":11,"affixes":["生命值 +117","暴击率 +7%"],"desc":"散发宁神香气的小袋,有助于低阶修士初步入定,感受灵气。","id":"693bd3ac9372a","quantity":1},{"name":"炫光盾","type":"armor","enhanceLevel":0,"quality":"rare","level":35,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":846,"crit":0,"critdmg":0,"affixes":["魔攻 +45"],"desc":"顶级防御法器,激发后形成光盾,可抵挡筑基期以下大部分攻击。","id":"693bd96c127be","quantity":1},{"name":"灵兽袋","type":"ring","enhanceLevel":0,"quality":"common","level":35,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":7,"critdmg":0,"affixes":[],"desc":"用于携带和临时安置如“血玉蜘蛛”等灵虫、灵兽。","id":"693bd96c127c8","quantity":1},{"id":"693bd96c127e4","type":"quest_item","name":"结丹期修为","quality":"legendary","level":1,"quantity":1,"desc":"关键任务物品,用于解锁新区域"},{"name":"金蚨子母刃","type":"weapon","enhanceLevel":0,"quality":"common","level":21,"patk":46,"matk":40,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":0,"affixes":[],"desc":"顶级法器,一套多枚,变化灵活,是韩立禁地之行主力攻击手段。","id":"693bd982e2ba7","quantity":1}],"equip":{"ring":{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"legendary","level":8,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":0,"crit":15,"critdmg":10,"affixes":["暴击伤害 +10","物攻 +26","魔攻 +22"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bcbf9a3711","quantity":1},"boots":{"name":"神行靴","type":"boots","enhanceLevel":0,"quality":"legendary","level":13,"patk":0,"matk":0,"pdef":47,"mdef":48,"hp":432,"crit":0,"critdmg":0,"affixes":["生命值 +9%","暴击率 +8%","魔防 +10%"],"desc":"刻画了基础轻身符文的靴子,能小幅提升移动速度。","id":"693bc62557cde","quantity":1},"necklace":{"name":"安神香囊","type":"necklace","enhanceLevel":0,"quality":"epic","level":10,"patk":0,"matk":0,"pdef":0,"mdef":0,"hp":303,"crit":0,"critdmg":11,"affixes":["暴击伤害 +5%","物防 +18"],"desc":"散发宁神香气的小袋,有助于低阶修士初步入定,感受灵气。","id":"693bba6c20817","quantity":1},"armor":{"name":"棉铁内甲","type":"armor","enhanceLevel":5,"quality":"legendary","level":8,"patk":0,"matk":0,"pdef":0,"mdef":26,"hp":259,"crit":0,"critdmg":0,"affixes":["物防 +14","生命值 +94","魔防 +18"],"desc":"以棉花与铁片编织而成的护身软甲,能有效抵御普通刀剑劈砍。","id":"693bb3bcd49f1","quantity":1},"weapon":{"name":"飞行符","type":"weapon","enhanceLevel":5,"quality":"epic","level":11,"patk":40,"matk":36,"pdef":0,"mdef":0,"hp":0,"crit":9,"critdmg":0,"affixes":["生命值 +188","暴击率 +5%"],"desc":"低阶修士常用代步工具,注入微薄法力即可贴地滑行。","id":"693bb815958bc","quantity":1}},"spiritStones":22587,"npcFlags":[],"talentPoints":0,"talents":{"hp":23,"patk":26,"matk":0,"pdef":2,"mdef":0,"crit":0,"critdmg":0},"mana":60,"maxMana":60,"skillSlots":{"skill1":null,"skill2":null,"skill3":null,"skill4":null},"partners":[{"id":"li_feiyu","name":"厉飞雨","level":16,"exp":5111,"maxExp":5796,"equip":{"boots":{"name":"神行靴","type":"boots","enhanceLevel":0,"quality":"epic","level":14,"patk":0,"matk":0,"pdef":37,"mdef":0,"hp":380,"crit":0,"critdmg":0,"affixes":["物防 +22","生命值 +181"],"desc":"刻画了基础轻身符文的靴子,能小幅提升移动速度。","id":"693bc59cce757","quantity":1},"ring":{"name":"灵石袋","type":"ring","enhanceLevel":0,"quality":"epic","level":15,"patk":0,"matk":37,"pdef":0,"mdef":0,"hp":0,"crit":11,"critdmg":0,"affixes":["物攻 +26","暴击率 +11%"],"desc":"低阶储物袋,空间狭小,用于存放寥寥数块灵石与杂物。","id":"693bcd5304d2b","quantity":1},"necklace":{"name":"安神香囊","type":"necklace","enhanceLevel":0,"quality":"epic","level":13,"patk":0,"matk":0,"pdef":0,"mdef":31,"hp":402,"crit":0,"critdmg":0,"affixes":["魔防 +9%","生命值 +209"],"desc":"散发宁神香气的小袋,有助于低阶修士初步入定,感受灵气。","id":"693bc43bdf182","quantity":1},"weapon":{"name":"飞行符","type":"weapon","enhanceLevel":0,"quality":"epic","level":16,"patk":41,"matk":44,"pdef":0,"mdef":0,"hp":0,"crit":0,"critdmg":7,"affixes":["暴击率 +4","物攻 +13%"],"desc":"低阶修士常用代步工具,注入微薄法力即可贴地滑行。","id":"693bcd060614a","quantity":1},"armor":{"name":"淡蓝长衫","type":"armor","enhanceLevel":0,"quality":"epic","level":14,"patk":0,"matk":0,"pdef":0,"mdef":27,"hp":405,"crit":0,"critdmg":0,"affixes":["物防 +10%","魔攻 +23"],"desc":"低阶法衣,略有避尘、清凉效果,是散修常见装扮。","id":"693bc949a000f","quantity":1}},"talents":{"hp":15,"patk":15,"matk":0,"pdef":0,"mdef":0,"crit":15,"critdmg":0},"talentWeights":{"hp":1,"patk":3,"matk":1,"pdef":1,"mdef":1,"crit":3,"critdmg":2},"mana":100,"maxMana":100,"skillSlots":{"skill1":null,"skill2":null,"skill3":null,"skill4":null},"hp":-41,"maxHp":100,"patk":15,"matk":5,"pdef":5,"mdef":3,"crit":10,"critdmg":130}]},"dungeonId":3,"state":2} \ No newline at end of file diff --git a/src/Console/ConsoleOutput.php b/src/Console/ConsoleOutput.php new file mode 100644 index 0000000..8b34b18 --- /dev/null +++ b/src/Console/ConsoleOutput.php @@ -0,0 +1,22 @@ +usersFile = __DIR__ . '/../../data/users.json'; + + // 确保目录存在 + $dir = dirname($this->usersFile); + if (!is_dir($dir)) { + mkdir($dir, 0755, true); + } + + $this->loadUsers(); + } + + private function loadUsers(): void + { + if (file_exists($this->usersFile)) { + $data = json_decode(file_get_contents($this->usersFile), true); + if (is_array($data)) { + $this->users = $data; + } + } + } + + private function saveUsers(): void + { + file_put_contents($this->usersFile, json_encode($this->users, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + } + + /** + * 注册新用户 + * @return array ['success' => bool, 'message' => string, 'userId' => string|null] + */ + public function register(string $username, string $password): array + { + // 验证用户名 + $username = trim($username); + if (strlen($username) < 2 || strlen($username) > 20) { + return ['success' => false, 'message' => '用户名长度需要在2-20个字符之间', 'userId' => null]; + } + + if (!preg_match('/^[a-zA-Z0-9_\x{4e00}-\x{9fa5}]+$/u', $username)) { + return ['success' => false, 'message' => '用户名只能包含字母、数字、下划线和中文', 'userId' => null]; + } + + // 检查用户名是否已存在 + if ($this->userExists($username)) { + return ['success' => false, 'message' => '用户名已存在', 'userId' => null]; + } + + // 验证密码 + if (strlen($password) < 4) { + return ['success' => false, 'message' => '密码长度至少4个字符', 'userId' => null]; + } + + // 生成用户ID + $userId = $this->generateUserId($username); + + // 保存用户 + $this->users[$userId] = [ + 'id' => $userId, + 'username' => $username, + 'password' => password_hash($password, PASSWORD_DEFAULT), + 'created_at' => date('Y-m-d H:i:s'), + 'last_login' => null, + ]; + + $this->saveUsers(); + + return ['success' => true, 'message' => '注册成功', 'userId' => $userId]; + } + + /** + * 用户登录 + * @return array ['success' => bool, 'message' => string, 'userId' => string|null] + */ + public function login(string $username, string $password): array + { + $username = trim($username); + + // 查找用户 + $user = $this->findUserByUsername($username); + if (!$user) { + return ['success' => false, 'message' => '用户不存在', 'userId' => null]; + } + + // 验证密码 + if (!password_verify($password, $user['password'])) { + return ['success' => false, 'message' => '密码错误', 'userId' => null]; + } + + // 更新最后登录时间 + $this->users[$user['id']]['last_login'] = date('Y-m-d H:i:s'); + $this->saveUsers(); + + return ['success' => true, 'message' => '登录成功', 'userId' => $user['id']]; + } + + /** + * 检查用户名是否存在 + */ + public function userExists(string $username): bool + { + return $this->findUserByUsername($username) !== null; + } + + /** + * 根据用户名查找用户 + */ + private function findUserByUsername(string $username): ?array + { + foreach ($this->users as $user) { + if (strcasecmp($user['username'], $username) === 0) { + return $user; + } + } + return null; + } + + /** + * 生成用户ID + */ + private function generateUserId(string $username): string + { + // 使用用户名+时间戳的哈希 + return substr(md5($username . time() . rand(1000, 9999)), 0, 16); + } + + /** + * 获取用户信息 + */ + public function getUser(string $userId): ?array + { + return $this->users[$userId] ?? null; + } + + /** + * 获取所有用户数量 + */ + public function getUserCount(): int + { + return count($this->users); + } +} diff --git a/src/Data/monster.json b/src/Data/monster.json index 80e66e9..15739e5 100644 --- a/src/Data/monster.json +++ b/src/Data/monster.json @@ -454,8 +454,8 @@ "hp": 1, "patk": 0, "matk": 0, - "pdef": 999, - "mdef": 999, + "pdef": 100, + "mdef": 100, "crit": 0, "critdmg": 100, "exp": 400, diff --git a/src/Entities/Actor.php b/src/Entities/Actor.php index a903da8..37aebd1 100644 --- a/src/Entities/Actor.php +++ b/src/Entities/Actor.php @@ -18,8 +18,8 @@ class Actor public int $crit = 0; public float $critdmg = 110.0; - public int $mana = 60; - public int $maxMana = 60; + public int $mana = 100; + public int $maxMana = 100; // 防护系统 public bool $isProtecting = false; // 是否处于防护状态 diff --git a/src/Entities/Monster.php b/src/Entities/Monster.php index 52eef22..be18ae2 100644 --- a/src/Entities/Monster.php +++ b/src/Entities/Monster.php @@ -3,6 +3,7 @@ namespace Game\Entities; use Game\Modules\Bag\Consume; use Game\Modules\Bag\Equipment; +use Game\Modules\Bag\Quest; use Game\Modules\Bag\Spell; class Monster extends Actor @@ -84,6 +85,14 @@ class Monster extends Actor $monsterConfig_allow [] = $item; } } + if (empty($monsterConfig_allow)){ + if ($dungeonId < 2){ + $monsterConfig_allow = $monsterConfig[0]; + }else{ + $monsterConfig_allow = $monsterConfig; + } + } +// dd($monsterConfig_allow,$dungeonId); $monsterConfig = $monsterConfig_allow; $levels = array_column($monsterConfig,'level'); $total = 0; @@ -98,19 +107,18 @@ class Monster extends Actor $groupSize = rand(2, 4); } $group = []; - // Create each enemy independently using weighted random selection - for ($i = 1; $i < $groupSize; $i++) { + for ($i = 1; $i <= $groupSize; $i++) { $totalWeight = 0; foreach ($monsterConfig as $m) { - $totalWeight += $m['weight'] ?? 100; + $totalWeight += $m['weight'] ?? 10; } $rand = rand(1, $totalWeight); $selectedConfig = null; foreach ($monsterConfig as $m) { - $rand -= $m['weight'] ?? 100; + $rand -= $m['weight'] ?? 10; if ($rand <= 0) { $selectedConfig = $m; break; @@ -185,6 +193,9 @@ class Monster extends Actor } } $this->dropTable[] = Consume::createItem($dungeonId,$config['level']); + if ($this->is_boss){ + $this->dropTable[] = Quest::createItem($dungeonId); + } // 为怪物配置法术 $this->generateSpells($config); diff --git a/src/Entities/Player.php b/src/Entities/Player.php index 38dd2b2..51bc5c2 100644 --- a/src/Entities/Player.php +++ b/src/Entities/Player.php @@ -25,7 +25,7 @@ class Player extends Actor public array $partners = []; // 已招募的同伴 // Player特有的小绿瓶回复池 - public int $potionPool = 1000; // 小绿瓶初始回复量 + public int $potionPool = 10000; // 小绿瓶初始回复量 /** * 增加灵石 diff --git a/src/Modules/Bag/Item.php b/src/Modules/Bag/Item.php index 401dc68..9b1170f 100644 --- a/src/Modules/Bag/Item.php +++ b/src/Modules/Bag/Item.php @@ -31,7 +31,7 @@ abstract class Item return Colors::GREEN.'小绿瓶+'.$item['heal'].Colors::RESET; } else if ($item['type'] == 'spell') { return Spell::getLineShow($item); - } elseif ($item['type'] == 'quest') { + } elseif ($item['type'] == 'quest_item') { return Quest::getLineShow($item); } elseif ($item['type'] == 'consume') { return Consume::getLineShow($item); @@ -44,7 +44,7 @@ abstract class Item { if ($item['type'] == 'spell') { return Spell::calculateSellPrice($item); - } elseif ($item['type'] == 'quest') { + } elseif ($item['type'] == 'quest_item') { return Quest::calculateSellPrice($item); } elseif ($item['type'] == 'consume') { return Consume::calculateSellPrice($item); diff --git a/src/Modules/Bag/Quest.php b/src/Modules/Bag/Quest.php index 6ce9573..ad8ce5c 100644 --- a/src/Modules/Bag/Quest.php +++ b/src/Modules/Bag/Quest.php @@ -2,6 +2,8 @@ namespace Game\Modules\Bag; +use Game\Core\Colors; + /** * Simple representation of an equipment/consumable item. */ @@ -25,6 +27,23 @@ class Quest extends Item ]; } + public static function createItem($dungeonId) + { + $data = file_get_contents(__DIR__.'/../../Data/quest.json'); + $data = json_decode($data,true); + $name = $data[$dungeonId]; + return [ + 'id' => uniqid('quest_'), + 'type' => 'quest_item', + 'rate' => 20, + 'name' => $name, + 'quality' => 'legendary', + 'level' => 1, + 'quantity' => 1, + 'desc' => '关键任务物品,用于解锁新区域', + ]; + } + public function toArray(): array { return [ @@ -38,7 +57,7 @@ class Quest extends Item public static function getLineShow($item): string { - // TODO: Implement getLineShow() method. + return Colors::YELLOW.$item['name'].Colors::RESET; } public static function getDetailShow($item): array diff --git a/src/Modules/Battle.php b/src/Modules/Battle.php index be54b33..ba5b183 100644 --- a/src/Modules/Battle.php +++ b/src/Modules/Battle.php @@ -1,4 +1,5 @@ blue = Colors::BLUE; $this->qualityColors = [ - 'common' => Colors::WHITE, - 'rare' => Colors::BLUE, - 'epic' => Colors::MAGENTA, + 'common' => Colors::WHITE, + 'rare' => Colors::BLUE, + 'epic' => Colors::MAGENTA, 'legendary' => Colors::YELLOW, ]; } @@ -131,7 +132,7 @@ class Battle Screen::delay(500000); // 创建敌人群组 - $this->enemies = Monster::createGroup($this->game->dungeonId,$this->player->level); + $this->enemies = Monster::createGroup($this->game->dungeonId, $this->player->level); $this->totalMaxHp = 0; foreach ($this->enemies as $enemy) { @@ -174,7 +175,6 @@ class Battle // 怪物攻击 if ($this->enemiesAttack($out)) { - Screen::delay(1000000, $out); $this->syncPartnerHp(); return; } @@ -182,7 +182,6 @@ class Battle } else { // 怪物先攻 if ($this->enemiesAttack($out)) { - Screen::delay(1000000, $out); $this->syncPartnerHp(); return; } @@ -203,8 +202,6 @@ class Battle Screen::delay(800000, $out); if ($result) break; } - - Screen::delay(500000, $out); // 同步队友HP到Partner对象,然后保存状态 $this->syncPartnerHp(); $this->game->saveState(); @@ -212,37 +209,17 @@ class Battle } } - private function showEncounter($out) - { - Screen::clear($out); - $out->writeln(""); - $out->writeln("{$this->yellow}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━{$this->reset}"); - $out->writeln(""); - $out->writeln(" {$this->red}⚔️ 遭遇敌人!{$this->reset}"); - $out->writeln(""); - - foreach ($this->enemies as $enemy) { - $out->writeln(" {$this->bold}{$this->white}{$enemy->name}{$this->reset} {$this->cyan}Lv.{$enemy->level}{$this->reset}"); - } - - $out->writeln(""); - $out->writeln("{$this->yellow}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━{$this->reset}"); - Screen::delay(1000000, $out); // 1秒 - } - private function renderBattleScreen($out, bool $playerFirst) { Screen::clear($out); $stats = $this->player->getStats(); - $out->writeln("{$this->cyan}╔══════════════════════════════════════════╗{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->bold}第 {$this->round} 回合{$this->reset} {$this->white}[q] 逃跑{$this->reset} {$this->cyan}║{$this->reset}"); - $out->writeln("{$this->cyan}╠══════════════════════════════════════════╣{$this->reset}"); + $out->writeln("{$this->bold}第 {$this->round} 回合{$this->reset} {$this->white}[q] 逃跑{$this->reset} "); // 敌人信息 foreach ($this->enemies as $enemy) { if ($enemy->hp <= 0) { - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}💀{$this->reset} {$this->white}{$enemy->name}{$this->reset} {$this->red}[已击败]{$this->reset}"); + $out->writeln(" {$this->red}💀{$this->reset} {$this->white}{$enemy->name}{$this->reset} {$this->red}[已击败]{$this->reset}"); continue; } $enemyStats = $enemy->getStats(); @@ -251,25 +228,25 @@ class Battle $enemyHpBar = $this->renderHpBar($enemyHpPercent, 15); $enemyHpText = $enemy->hp . "/" . $enemyMaxHp; - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}👹{$this->reset} {$this->bold}{$enemy->name}{$this->reset} Lv.{$enemy->level}"); - $out->writeln("{$this->cyan}║{$this->reset} {$enemyHpBar} {$this->white}{$enemyHpText}{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}⚔️{$this->reset} {$enemyStats['patk']}/{$enemyStats['matk']} {$this->green}🛡️{$this->reset} {$enemyStats['pdef']}/{$enemyStats['mdef']} {$this->red}💥{$this->reset} {$enemyStats['crit']}/{$enemyStats['critdmg']}%"); + $out->writeln("{$this->red}👹{$this->reset} {$this->bold}{$enemy->name}{$this->reset} Lv.{$enemy->level}"); + $out->writeln("{$enemyHpBar} {$this->white}{$enemyHpText}{$this->reset}"); + $out->writeln("{$this->yellow}⚔️{$this->reset} {$enemyStats['patk']}/{$enemyStats['matk']} {$this->green}🛡️{$this->reset} {$enemyStats['pdef']}/{$enemyStats['mdef']} {$this->red}💥{$this->reset} {$enemyStats['crit']}/{$enemyStats['critdmg']}%"); } - - $out->writeln("{$this->cyan}║{$this->reset}"); + + $out->writeln(""); // VS 分隔 - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}⚔️ VS ⚔️{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset}"); + $out->writeln(" {$this->yellow}⚔️ VS ⚔️{$this->reset}"); + $out->writeln(""); // 玩家信息 $playerHpPercent = $this->player->hp / $stats['maxHp']; $playerHpBar = $this->renderHpBar($playerHpPercent, 20); $playerHpText = $this->player->hp . "/" . $stats['maxHp']; - $out->writeln("{$this->cyan}║{$this->reset} {$this->green}🧙{$this->reset} {$this->bold}玩家{$this->reset} Lv.{$this->player->level}"); - $out->writeln("{$this->cyan}║{$this->reset} {$playerHpBar} {$this->white}{$playerHpText}{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->blue}🔮 {$stats['mana']}/{$stats['maxMana']}{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}⚔️{$this->reset} {$stats['patk']}/{$stats['matk']} {$this->green}🛡️{$this->reset} {$stats['pdef']}/{$stats['mdef']} {$this->red}💥{$this->reset} {$stats['crit']}/{$stats['critdmg']}%"); + $out->writeln("{$this->green}🧙{$this->reset} {$this->bold}玩家{$this->reset} Lv.{$this->player->level}"); + $out->writeln("{$playerHpBar} {$this->white}{$playerHpText}{$this->reset}"); + $out->writeln("{$this->blue}🔮 {$stats['mana']}/{$stats['maxMana']}{$this->reset}"); + $out->writeln("{$this->yellow}⚔️{$this->reset} {$stats['patk']}/{$stats['matk']} {$this->green}🛡️{$this->reset} {$stats['pdef']}/{$stats['mdef']} {$this->red}💥{$this->reset} {$stats['crit']}/{$stats['critdmg']}%"); // 显示同伴信息 foreach ($this->player->partners as $partner) { @@ -281,20 +258,18 @@ class Battle $partnerHpText = $partnerHp . "/" . $partnerMaxHp; $status = $partnerHp > 0 ? "" : " {$this->red}[倒下]{$this->reset}"; - $out->writeln("{$this->cyan}║{$this->reset} {$this->magenta}👤{$this->reset} {$partner->name} Lv.{$partner->level}{$status}"); - $out->writeln("{$this->cyan}║{$this->reset} {$partnerHpBar} {$this->white}{$partnerHpText}{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->blue}🔮 {$partnerStats['mana']}/{$partnerStats['maxMana']}{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}⚔️{$this->reset} {$partnerStats['patk']}/{$partnerStats['matk']} {$this->green}🛡️{$this->reset} {$partnerStats['pdef']}/{$partnerStats['mdef']} {$this->red}💥{$this->reset} {$partnerStats['crit']}/{$partnerStats['critdmg']}%"); + $out->writeln("{$this->magenta}👤{$this->reset} {$partner->name} Lv.{$partner->level}{$status}"); + $out->writeln("{$partnerHpBar} {$this->white}{$partnerHpText}{$this->reset}"); + $out->writeln("{$this->blue}🔮 {$partnerStats['mana']}/{$partnerStats['maxMana']}{$this->reset}"); + $out->writeln("{$this->yellow}⚔️{$this->reset} {$partnerStats['patk']}/{$partnerStats['matk']} {$this->green}🛡️{$this->reset} {$partnerStats['pdef']}/{$partnerStats['mdef']} {$this->red}💥{$this->reset} {$partnerStats['crit']}/{$partnerStats['critdmg']}%"); } - - $out->writeln("{$this->cyan}╠══════════════════════════════════════════╣{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->white}战斗日志:{$this->reset}"); + $out->writeln(" {$this->white}战斗日志:{$this->reset}"); } private function renderHpBar(float $percent, int $width): string { - $filled = max((int)($percent * $width),0); - $empty = max($width - $filled,0); + $filled = max((int)($percent * $width), 0); + $empty = max($width - $filled, 0); // 根据血量百分比选择颜色 if ($percent > 0.6) { @@ -341,7 +316,7 @@ class Battle break; } } - + if (!$hasSpells || $this->player->mana < 15) { return 'attack'; } @@ -407,7 +382,7 @@ class Battle $threat += $target->getThreatBonus(); // 血量比例也会影响威胁值(血量越多越有威胁) - $threat += (int)($stats['hp'] / $stats['maxHp'] * 10); + $threat -= (int)($stats['hp'] / $stats['maxHp'] * 10); return $threat; } @@ -453,9 +428,9 @@ class Battle // 1. 分析战场状态 $opponents = $this->getOpponents($actor); $allies = $this->getAllies($actor); - + $enemyCount = count($opponents); - + $lowHpAllies = []; foreach ($allies as $ally) { $status = $ally->getStats(); @@ -485,9 +460,9 @@ class Battle 'cost' => $actualCost, 'level' => $spellItem['enhanceLevel'] ?? 0 ]; - + $type = $spellItem['spellType'] ?? 'damage_single'; - + if (isset($availableSpells[$type])) { $availableSpells[$type][] = $spellData; } @@ -529,7 +504,7 @@ class Battle $selected = $availableSpells['all'][array_rand($availableSpells['all'])]; } - if ($selected && in_array($selected['item']['spellType'],['heal_aoe', 'heal_single']) && $lowHpCount == 0){ + if ($selected && in_array($selected['item']['spellType'], ['heal_aoe', 'heal_single']) && $lowHpCount == 0) { return []; } @@ -563,12 +538,12 @@ class Battle $casterName = ($caster instanceof Player) ? "你" : $caster->name; $actionVerb = ($caster instanceof Player) ? "施放" : "施放了"; - $out->writeln("{$this->cyan}║{$this->reset} {$this->magenta}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); + $out->writeln("{$this->magenta}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); if ($isCrit) { - $out->writeln("{$this->cyan}║{$this->reset} {$this->magenta}✨ {$this->red}{$this->bold}暴击!{$this->reset} 对 {$target->name} 造成 {$this->red}{$damage}{$this->reset} 点魔法伤害!"); + $out->writeln("{$this->magenta}✨ {$this->red}{$this->bold}暴击!{$this->reset} 对 {$target->name} 造成 {$this->red}{$damage}{$this->reset} 点魔法伤害!"); } else { - $out->writeln("{$this->cyan}║{$this->reset} {$this->magenta}✨ 对 {$target->name} 造成 {$this->green}{$damage}{$this->reset} 点魔法伤害"); + $out->writeln("{$this->magenta}✨ 对 {$target->name} 造成 {$this->green}{$damage}{$this->reset} 点魔法伤害"); } // 应用防护机制:防护角色承受更多伤害 @@ -579,12 +554,12 @@ class Battle // // 如果防护角色正在保护队友,需要显示保护效果 // if ($target->isProtecting && $actualDamage > $damage) { // $extraDamage = $actualDamage - $damage; -// $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}🛡️ 防护状态:额外承受 {$extraDamage} 伤害!{$this->reset}"); +// $out->writeln(" {$this->yellow}🛡️ 防护状态:额外承受 {$extraDamage} 伤害!{$this->reset}"); // } if ($target->hp <= 0) { $target->hp = 0; - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}💀 {$target->name} 被击败了!{$this->reset}"); + $out->writeln("{$this->red}💀 {$target->name} 被击败了!{$this->reset}"); // 如果是玩家击败了所有敌人 if (($caster instanceof Player || $caster instanceof Partner) && empty($this->getAliveEnemies())) { @@ -616,9 +591,9 @@ class Battle $casterName = ($caster instanceof Player) ? "你" : $caster->name; $actionVerb = ($caster instanceof Player) ? "施放" : "施放了"; - $out->writeln("{$this->cyan}║{$this->reset} {$this->magenta}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); + $out->writeln("{$this->magenta}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); - $out->writeln("{$this->cyan}║{$this->reset} {$this->magenta}✨ 魔法在整个战场爆炸!{$this->reset}"); + $out->writeln("{$this->magenta}✨ 魔法在整个战场爆炸!{$this->reset}"); $opponents = $this->getOpponents($caster); $allOpponentsDefeated = true; @@ -629,30 +604,30 @@ class Battle $damageResult = SpellCalculator::calculateDamage($spellInfo, $stats, $enemy->getStats(), $damageBonus, true); $damage = $damageResult['damage']; - $out->writeln("{$this->cyan}║{$this->reset} {$enemy->name} 受到 {$damage} 点伤害"); + $out->writeln("{$enemy->name} 受到 {$damage} 点伤害"); $enemy->hp -= $damage; if ($enemy->hp <= 0) { $enemy->hp = 0; - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}💀 {$enemy->name} 被击败了!{$this->reset}"); - + $out->writeln("{$this->red}💀 {$enemy->name} 被击败了!{$this->reset}"); + if ($enemy instanceof Player) { - Screen::delay(500000, $out); - $this->showDefeat($out, $caster); - return true; + Screen::delay(500000, $out); + $this->showDefeat($out, $caster); + return true; } } else { $allOpponentsDefeated = false; } } - + // 更新同伴血量显示 (如果敌人是同伴) if (!($caster instanceof Player) && !($caster instanceof Partner)) { - foreach ($this->player->partners as $partner) { - if (isset($this->partnerHp[$partner->id])) { - $this->partnerHp[$partner->id] = $partner->hp; - } - } + foreach ($this->player->partners as $partner) { + if (isset($this->partnerHp[$partner->id])) { + $this->partnerHp[$partner->id] = $partner->hp; + } + } } if ($allOpponentsDefeated && ($caster instanceof Player || $caster instanceof Partner) && empty($this->getAliveEnemies())) { @@ -674,7 +649,7 @@ class Battle $allies = $this->getAllies($caster); $lowestHpRatio = 1.0; foreach ($allies as $ally) { - $status = $ally->getStats(); + $status = $ally->getStats(); $ratio = $status['hp'] / $status['maxHp']; if ($ratio < $lowestHpRatio) { $lowestHpRatio = $ratio; @@ -692,20 +667,20 @@ class Battle $casterName = ($caster instanceof Player) ? "你" : $caster->name; $actionVerb = ($caster instanceof Player) ? "施放" : "施放了"; - $out->writeln("{$this->cyan}║{$this->reset} {$this->green}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); + $out->writeln("{$this->green}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); $healAmount = SpellCalculator::calculateHeal($spellInfo, $stats, $healBonus); $actualHeal = $target->heal($healAmount); - + // 更新同伴血量显示 if ($target instanceof Partner && isset($this->partnerHp[$target->id])) { $this->partnerHp[$target->id] = $target->hp; } $targetName = ($target === $this->player) ? "你" : $target->name; - $out->writeln("{$this->cyan}║{$this->reset} {$this->green}💚 {$targetName} 恢复了 {$actualHeal} 点生命值{$this->reset}"); + $out->writeln("{$this->green}💚 {$targetName} 恢复了 {$actualHeal} 点生命值{$this->reset}"); return false; } @@ -722,28 +697,28 @@ class Battle $casterName = ($caster instanceof Player) ? "你" : $caster->name; $actionVerb = ($caster instanceof Player) ? "施放" : "施放了"; - $out->writeln("{$this->cyan}║{$this->reset} {$this->green}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); + $out->writeln("{$this->green}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); $healAmount = SpellCalculator::calculateHeal($spellInfo, $stats, $healBonus); $allies = $this->getAllies($caster); - + foreach ($allies as $ally) { if ($ally->hp <= 0) continue; - + // 如果是施法者本人,全额治疗;如果是队友,80%效果 $finalHeal = ($ally === $caster) ? $healAmount : (int)($healAmount * 0.9); - + $actualHeal = $ally->heal($finalHeal); - + // 更新同伴血量显示 if ($ally instanceof Partner && isset($this->partnerHp[$ally->id])) { $this->partnerHp[$ally->id] = $ally->hp; } $allyName = ($ally === $this->player) ? "你" : $ally->name; - $out->writeln("{$this->cyan}║{$this->reset} {$this->green}💚 {$allyName} 恢复了 {$actualHeal} 点生命值{$this->reset}"); + $out->writeln("{$this->green}💚 {$allyName} 恢复了 {$actualHeal} 点生命值{$this->reset}"); } return false; @@ -764,7 +739,7 @@ class Battle $casterName = ($caster instanceof Player) ? "你" : $caster->name; $actionVerb = ($caster instanceof Player) ? "施放" : "施放了"; - $out->writeln("{$this->cyan}║{$this->reset} {$this->cyan}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); + $out->writeln("{$this->cyan}✦{$this->reset} {$casterName} {$actionVerb} {$qualityColor}{$name}{$this->reset}"); $subtype = $spellInfo['subtype'] ?? ''; @@ -778,7 +753,7 @@ class Battle } } elseif ($subtype === 'defend') { // 简单的防御提升逻辑 (目前只是显示,实际效果需在伤害计算中支持buff) - $out->writeln("{$this->cyan}║{$this->reset} {$this->cyan}🛡️ 防御力提升!{$this->reset}"); + $out->writeln("{$this->cyan}🛡️ 防御力提升!{$this->reset}"); } return false; @@ -848,12 +823,12 @@ class Battle $protectingAlly->exitProtectMode(); $protectingName = ($protectingAlly instanceof Player) ? "你" : $protectingAlly->name; - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}🛡️{$this->reset} {$protectingName} 退出防护状态。{$this->reset}"); + $out->writeln(" {$this->yellow}🛡️{$this->reset} {$protectingName} 退出防护状态。{$this->reset}"); $actor->enterProtectMode(); $actorName = ($actor instanceof Player) ? "你" : $actor->name; - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}🛡️{$this->reset} {$actorName} 主动进入防护状态,为队友抗伤!{$this->reset}"); + $out->writeln("{$this->yellow}🛡️{$this->reset} {$actorName} 主动进入防护状态,为队友抗伤!{$this->reset}"); } return; } @@ -862,7 +837,7 @@ class Battle $actor->enterProtectMode(); $actorName = ($actor instanceof Player) ? "你" : $actor->name; - $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}🛡️{$this->reset} {$actorName} 主动进入防护状态,为队友抗伤!{$this->reset}"); + $out->writeln("{$this->yellow}🛡️{$this->reset} {$actorName} 主动进入防护状态,为队友抗伤!{$this->reset}"); } } @@ -871,7 +846,7 @@ class Battle */ private function executeActorTurn(Actor $actor, $out): bool { - if ($actor->hp <= 0){ + if ($actor->hp <= 0) { return false; } @@ -896,7 +871,7 @@ class Battle $spellInfo = $spellItem; $spellInfo['type'] = $type; - + $stats = $actor->getStats(); if ($type === 'damage_single') { @@ -920,7 +895,7 @@ class Battle $stats = $actor->getStats(); $targetStats = $target->getStats(); - + // 计算伤害 $physicalDamage = max(1, $stats['patk'] - $targetStats['pdef']); // $magicDamage = max(0, $stats['matk'] - $targetStats['mdef']); @@ -933,32 +908,25 @@ class Battle $actorName = ($actor instanceof Player) ? "你" : $actor->name; $targetName = ($target === $this->player) ? "你" : $target->name; $actionVerb = ($actor instanceof Player) ? "攻击" : "向 {$targetName} 发起攻击"; - + if ($actor instanceof Player) { - $out->writeln("{$this->cyan}║{$this->reset} {$this->green}➤{$this->reset} 你攻击 {$targetName}..."); + $out->writeln("{$this->green}➤{$this->reset} 你攻击 {$targetName}..."); } else { - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}➤{$this->reset} {$actorName} {$actionVerb}..."); + $out->writeln("{$this->red}➤{$this->reset} {$actorName} {$actionVerb}..."); } if ($isCrit) { $damage = (int)($baseDamage * ($critDmg / 100)); - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}💥 造成 {$damage} 点暴击伤害!{$this->reset}"); + $out->writeln("{$this->red}💥 造成 {$damage} 点暴击伤害!{$this->reset}"); } else { $damage = $baseDamage; - $out->writeln("{$this->cyan}║{$this->reset} {$this->white}⚔️ 造成 {$damage} 点伤害{$this->reset}"); + $out->writeln("{$this->white}⚔️ 造成 {$damage} 点伤害{$this->reset}"); } - // 应用防护机制:防护角色承受更多伤害 - $actualDamage = (int)($damage * (1 + $target->getProtectDamageTakenBonus())); $target->hp -= $damage; - // 如果防护角色正在保护队友,需要显示保护效果 -// if ($target->isProtecting && $actualDamage > $damage) { -// $extraDamage = $actualDamage - $damage; -// $out->writeln("{$this->cyan}║{$this->reset} {$this->yellow}🛡️ 防护状态:额外承受 {$extraDamage} 伤害!{$this->reset}"); -// } - + // 蓝量恢复机制 // 攻击者恢复 15 点 $actorRecovered = $actor->recoverMana(15); @@ -972,14 +940,14 @@ class Battle if ($target->hp <= 0) { $target->hp = 0; - $out->writeln("{$this->cyan}║{$this->reset} {$this->red}💀 {$targetName} 倒下了!{$this->reset}"); - + $out->writeln("{$this->red}💀 {$targetName} 倒下了!{$this->reset}"); + if (($actor instanceof Player || $actor instanceof Partner) && empty($this->getAliveEnemies())) { Screen::delay(500000, $out); $this->showVictory($out, $stats); return true; } - + if ($target instanceof Player) { Screen::delay(500000, $out); $this->showDefeat($out, $actor); @@ -1037,17 +1005,11 @@ class Battle private function showVictory($out, $stats) { Screen::clear($out); - $out->writeln(""); - $out->writeln("{$this->yellow}╔══════════════════════════════════════════╗{$this->reset}"); - $out->writeln("{$this->yellow}║{$this->reset} {$this->yellow}║{$this->reset}"); - $out->writeln("{$this->yellow}║{$this->reset} {$this->green}{$this->bold}🎉 胜 利 ! 🎉{$this->reset} {$this->yellow}║{$this->reset}"); - $out->writeln("{$this->yellow}║{$this->reset} {$this->yellow}║{$this->reset}"); - $out->writeln("{$this->yellow}╠══════════════════════════════════════════╣{$this->reset}"); - + $enemyNames = []; foreach ($this->enemies as $e) $enemyNames[] = $e->name; - $out->writeln("{$this->yellow}║{$this->reset} 击败: {$this->white}" . implode(', ', array_unique($enemyNames)) . "{$this->reset}"); - $out->writeln("{$this->yellow}║{$this->reset} 血量: {$this->green}{$this->player->hp}{$this->reset}/{$stats['maxHp']}"); + $out->writeln("击败: {$this->white}" . implode(', ', array_unique($enemyNames)) . "{$this->reset}"); + $out->writeln("血量: {$this->green}{$this->player->hp}{$this->reset}/{$stats['maxHp']}"); // 汇总经验和灵石 $totalExp = 0; @@ -1083,6 +1045,9 @@ class Battle 'heal' => $item['heal'], 'quantity' => 1 ]; + }else{ + unset($item['rate']); + $this->player->addItem($item); } } } @@ -1093,7 +1058,7 @@ class Battle if ($this->player->gainExp($totalExp)) { $levelUpMsg = " {$this->yellow}🎊 升级! Lv.{$this->player->level}{$this->reset}"; } - $out->writeln("{$this->yellow}║{$this->reset} 经验: {$this->cyan}+{$totalExp}{$this->reset}{$levelUpMsg}"); + $out->writeln("经验: {$this->cyan}+{$totalExp}{$this->reset}{$levelUpMsg}"); // 同伴经验 $alivePartners = $this->getAlivePartners(); @@ -1104,20 +1069,20 @@ class Battle if ($partner->gainExp($partnerExp)) { $partnerLevelUp = " {$this->yellow}🎊 升级! Lv.{$partner->level}{$this->reset}"; } - $out->writeln("{$this->yellow}║{$this->reset} {$this->magenta}{$partner->name}{$this->reset}: {$this->cyan}+{$partnerExp}{$this->reset}{$partnerLevelUp}"); + $out->writeln("{$this->magenta}{$partner->name}{$this->reset}: {$this->cyan}+{$partnerExp}{$this->reset}{$partnerLevelUp}"); } } // 灵石 if ($totalStones > 0) { $this->player->addSpiritStones($totalStones); - $out->writeln("{$this->yellow}║{$this->reset} 灵石: {$this->yellow}+{$totalStones}{$this->reset}"); + $out->writeln("灵石: {$this->yellow}+{$totalStones}{$this->reset}"); } // 恢复魔法值 $manaRecover = (int)($this->player->maxMana * 0.3); // 恢复30%的最大魔法值 $actualManaRecover = $this->player->recoverMana($manaRecover); - $out->writeln("{$this->yellow}║{$this->reset} 魔法: {$this->magenta}+{$actualManaRecover}{$this->reset}"); + $out->writeln("魔法: {$this->magenta}+{$actualManaRecover}{$this->reset}"); // 恢复队友魔法值 $alivePartners = $this->getAlivePartners(); @@ -1128,15 +1093,11 @@ class Battle } if (!empty($allDrops)) { - $out->writeln("{$this->yellow}║{$this->reset} {$this->white}掉落:{$this->reset}"); + $out->writeln("{$this->white}掉落:{$this->reset}"); foreach ($allDrops as $item) { $out->writeln(Item::show($item)); } } - - $out->writeln("{$this->yellow}╚══════════════════════════════════════════╝{$this->reset}"); - $out->writeln(""); - $this->game->saveState(); Screen::delay(1500000, $out); } @@ -1145,19 +1106,8 @@ class Battle { Screen::clear($out); $killerName = $killer ? $killer->name : "敌人"; - - $out->writeln(""); - $out->writeln("{$this->red}╔══════════════════════════════════════════╗{$this->reset}"); - $out->writeln("{$this->red}║{$this->reset} {$this->red}║{$this->reset}"); - $out->writeln("{$this->red}║{$this->reset} {$this->red}{$this->bold}💀 战 败 ! 💀{$this->reset} {$this->red}║{$this->reset}"); - $out->writeln("{$this->red}║{$this->reset} {$this->red}║{$this->reset}"); - $out->writeln("{$this->red}╠══════════════════════════════════════════╣{$this->reset}"); - $out->writeln("{$this->red}║{$this->reset} 你被 {$this->white}{$killerName}{$this->reset} 击败了..."); - $out->writeln("{$this->red}║{$this->reset}"); - $out->writeln("{$this->red}║{$this->reset} {$this->white}不要气馁,休整后再战!{$this->reset}"); - $out->writeln("{$this->red}╚══════════════════════════════════════════╝{$this->reset}"); - $out->writeln(""); - + $out->writeln("你被 {$this->white}{$killerName}{$this->reset} 击败了..."); + $out->writeln("{$this->white}不要气馁,休整后再战!{$this->reset}"); $this->game->state = Game::MENU; Screen::pause($out); } diff --git a/src/Modules/InventoryPanel.php b/src/Modules/InventoryPanel.php index b0a41ef..1a26885 100644 --- a/src/Modules/InventoryPanel.php +++ b/src/Modules/InventoryPanel.php @@ -97,12 +97,7 @@ class InventoryPanel foreach ($pageItems as $i => $item) { $index = $start + $i + 1; // 装备使用 ItemDisplay 显示 - if ($item['type'] == 'quest_item'){ - - }else{ - $displayStr = Item::show($item); - } - + $displayStr = Item::show($item); $out->writeln("[{$index}] {$displayStr}"); } diff --git a/src/Modules/Menu.php b/src/Modules/Menu.php index 0252a45..95789f4 100644 --- a/src/Modules/Menu.php +++ b/src/Modules/Menu.php @@ -1,6 +1,7 @@ game->output); $out = $this->game->output; - $out->writeln("========================="); + $out->writeln(Colors::RESET."========================="); $out->writeln("[1] 开始战斗"); $out->writeln("[2] 属性面板"); $out->writeln("[3] 背包"); diff --git a/test/Test.php b/test/Test.php index 4f7da29..ae76bef 100644 --- a/test/Test.php +++ b/test/Test.php @@ -6,8 +6,10 @@ use Game\Modules\Bag\Spell; require __DIR__ . '/../vendor/autoload.php'; -$res = \Game\Entities\Monster::create(1); -dd($res); +$data = file_get_contents('/Users/hant/MyData/study/idle/src/Data/map.json'); +$data = json_decode($data,true); +$data = array_column($data,'key_item'); +file_put_contents('/Users/hant/MyData/study/idle/src/Data/quest.json',json_encode($data,JSON_UNESCAPED_UNICODE)); diff --git a/web/server.php b/web/server.php index 99b8577..40c2d3c 100644 --- a/web/server.php +++ b/web/server.php @@ -4,9 +4,21 @@ * 使用方法: php -S 0.0.0.0:8080 web/server.php */ +// 设置错误报告 +error_reporting(E_ALL); +ini_set('display_errors', 0); + // 自动加载 require_once __DIR__ . '/../vendor/autoload.php'; + +use Game\Core\UserManager; + + + +// 启动会话 +session_start(); + // 设置响应头 header('Content-Type: application/json; charset=utf-8'); header('Access-Control-Allow-Origin: *'); @@ -26,29 +38,117 @@ $path = parse_url($requestUri, PHP_URL_PATH); // 静态文件处理 if ($path === '/' || $path === '/process.html') { header('Content-Type: text/html; charset=utf-8'); - echo ' - -
-