死亡流程梳理
This commit is contained in:
parent
6c3a9de672
commit
06af34a127
@ -14,8 +14,8 @@
|
|||||||
"loadtest": "colyseus-loadtest loadtest/example.ts --room my_room --numClients 3",
|
"loadtest": "colyseus-loadtest loadtest/example.ts --room my_room --numClients 3",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"robot": "node --require ts-node/register --inspect=0.0.0.0:9228 src/robot.ts",
|
"robot": "node --require ts-node/register --inspect=0.0.0.0:9228 src/robot.ts",
|
||||||
"win:": "@powershell -Command $env:DEBUG='jc:*';node --require ts-node/register --inspect src/index.ts",
|
"win": "$env:DEBUG='jc:*';node --require ts-node/register --inspect src/index.ts",
|
||||||
"win:robot:": "@powershell -Command $env:DEBUG='jc:*';node --require ts-node/register --inspect src/robot.ts"
|
"win-robot": "$env:DEBUG='jc:*';node --require ts-node/register --inspect src/robot.ts"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -26,28 +26,13 @@ export class BattleHandler {
|
|||||||
private _sktime: number;
|
private _sktime: number;
|
||||||
private _gamestart: boolean = false;
|
private _gamestart: boolean = false;
|
||||||
|
|
||||||
|
//--------------------对外接口--player相关---(外部调用)----------------------------
|
||||||
public init(cs: CardGameState, room: Room){
|
public init(cs: CardGameState, room: Room){
|
||||||
this._cs = cs;
|
this._cs = cs;
|
||||||
this._room = room;
|
this._room = room;
|
||||||
this._gamestart = false;
|
this._gamestart = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
public addPlayer(aplayer: Player): PlayerHandler{
|
|
||||||
let ph = new PlayerHandler();
|
|
||||||
ph.init(aplayer, this);
|
|
||||||
this._players.forEach((item: PlayerHandler) => {
|
|
||||||
if(item._player.team == aplayer.team && item._player != aplayer){
|
|
||||||
item._friend = ph;
|
|
||||||
ph._friend = item;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this._players.set(aplayer, ph);
|
|
||||||
this._playerids.set(aplayer.id + '', aplayer);
|
|
||||||
|
|
||||||
return ph;
|
|
||||||
};
|
|
||||||
|
|
||||||
public delPlayer(aplayer: Player){
|
public delPlayer(aplayer: Player){
|
||||||
let id = aplayer.id + '';
|
let id = aplayer.id + '';
|
||||||
let ph = this.getPlayer(aplayer);
|
let ph = this.getPlayer(aplayer);
|
||||||
@ -82,6 +67,23 @@ export class BattleHandler {
|
|||||||
this.addPlayer(newplayer);
|
this.addPlayer(newplayer);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public addPlayer(aplayer: Player): PlayerHandler{
|
||||||
|
let ph = new PlayerHandler();
|
||||||
|
ph.init(aplayer, this);
|
||||||
|
this._players.forEach((item: PlayerHandler) => {
|
||||||
|
if(item._player.team == aplayer.team && item._player != aplayer){
|
||||||
|
item._friend = ph;
|
||||||
|
ph._friend = item;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._players.set(aplayer, ph);
|
||||||
|
this._playerids.set(aplayer.id + '', aplayer);
|
||||||
|
|
||||||
|
return ph;
|
||||||
|
};
|
||||||
|
|
||||||
public getPlayer(aplayer: Player): PlayerHandler{
|
public getPlayer(aplayer: Player): PlayerHandler{
|
||||||
return aplayer? this._players.get(aplayer): null;
|
return aplayer? this._players.get(aplayer): null;
|
||||||
@ -104,9 +106,10 @@ export class BattleHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public petIsValid(pet: PetHandler, players: PlayerHandler[], ct: GameUnitType): boolean{
|
public petIsValid(pet: PetHandler, players: PlayerHandler[], ct: GameUnitType): boolean{
|
||||||
if(!players || players.length == 0 || !pet){
|
if(!players || players.length == 0 || !pet || !pet.isAlive()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let obj = players.find( (item: PlayerHandler) =>{
|
let obj = players.find( (item: PlayerHandler) =>{
|
||||||
return item.isMyPet(pet);
|
return item.isMyPet(pet);
|
||||||
});
|
});
|
||||||
@ -324,7 +327,7 @@ export class BattleHandler {
|
|||||||
let player = this._room.getOppositePlayer(src.getId());
|
let player = this._room.getOppositePlayer(src.getId());
|
||||||
if(player){
|
if(player){
|
||||||
let ph = this.getPlayer(player);
|
let ph = this.getPlayer(player);
|
||||||
if(ph){
|
if(ph && ph.isAlive()){
|
||||||
lst.push(ph);
|
lst.push(ph);
|
||||||
bfind = true;
|
bfind = true;
|
||||||
}
|
}
|
||||||
@ -359,6 +362,7 @@ export class BattleHandler {
|
|||||||
public isUsingCard(){
|
public isUsingCard(){
|
||||||
return this._cardusing;
|
return this._cardusing;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------对外接口(外部调用)----------------------------
|
//--------------------对外接口(外部调用)----------------------------
|
||||||
/**
|
/**
|
||||||
* 使用卡片
|
* 使用卡片
|
||||||
@ -618,6 +622,7 @@ export class BattleHandler {
|
|||||||
if(!skillres || skillres.length <= 0){
|
if(!skillres || skillres.length <= 0){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
let checklst: PlayerHandler[] = [];
|
||||||
let lst: SkillInfoMsg[] = [];
|
let lst: SkillInfoMsg[] = [];
|
||||||
let difflst: SkillTarget[] = [];
|
let difflst: SkillTarget[] = [];
|
||||||
skillres.forEach((item: SkillTarget)=>{
|
skillres.forEach((item: SkillTarget)=>{
|
||||||
@ -631,6 +636,13 @@ export class BattleHandler {
|
|||||||
difflst.forEach((item: SkillTarget) =>{
|
difflst.forEach((item: SkillTarget) =>{
|
||||||
tm += item.getLastTime();
|
tm += item.getLastTime();
|
||||||
skid += item.srcskillid + '|';
|
skid += item.srcskillid + '|';
|
||||||
|
|
||||||
|
if(item.isHurtSkill() && item.targetIsPet()){
|
||||||
|
let ph = item.targetPlayer();
|
||||||
|
if(!checklst.includes(ph)){
|
||||||
|
checklst.push(ph);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if(this.isUsingCard()){
|
if(this.isUsingCard()){
|
||||||
@ -639,6 +651,10 @@ export class BattleHandler {
|
|||||||
this._room.addScheduleTime(tm*1000, skid);
|
this._room.addScheduleTime(tm*1000, skid);
|
||||||
}
|
}
|
||||||
this._room.bMsgQueue(lst);
|
this._room.bMsgQueue(lst);
|
||||||
|
|
||||||
|
checklst.forEach((item: PlayerHandler) => {
|
||||||
|
item.checkPets();
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
public onPlayerAddHPNotify(aplayer: PlayerHandler, addhp: number){
|
public onPlayerAddHPNotify(aplayer: PlayerHandler, addhp: number){
|
||||||
|
@ -332,8 +332,8 @@ export class PetHandler {
|
|||||||
this._owner.onPetBorned(this, param);
|
this._owner.onPetBorned(this, param);
|
||||||
};
|
};
|
||||||
|
|
||||||
public isDead(){
|
public isAlive(){
|
||||||
return this._baseap <= 0;
|
return this._baseap > 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
public die(){
|
public die(){
|
||||||
@ -360,7 +360,7 @@ export class PetHandler {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this._baseap <= 0){
|
if(!this.isAlive()){
|
||||||
this._effhalos.forEach((item: Skill) => {
|
this._effhalos.forEach((item: Skill) => {
|
||||||
item.resetHaloValue();
|
item.resetHaloValue();
|
||||||
});
|
});
|
||||||
|
@ -131,23 +131,28 @@ export class PlayerHandler {
|
|||||||
let ct = skill._data.targetid;
|
let ct = skill._data.targetid;
|
||||||
switch(ct){
|
switch(ct){
|
||||||
case GameUnitType.BATTLEUNIT:
|
case GameUnitType.BATTLEUNIT:
|
||||||
let lst = this._pets.reverse();
|
{
|
||||||
lst.forEach(element => {
|
let lst = this._pets.reverse();
|
||||||
if(expet != element){
|
lst.forEach(element => {
|
||||||
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET));
|
if(expet != element && element.isAlive()){
|
||||||
}
|
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET));
|
||||||
});
|
}
|
||||||
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO));
|
});
|
||||||
|
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GameUnitType.HERO:
|
case GameUnitType.HERO:
|
||||||
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO));
|
(expet != this._self) && dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, this._self, GameUnitType.HERO));
|
||||||
break;
|
break;
|
||||||
case GameUnitType.PET:
|
case GameUnitType.PET:
|
||||||
lst.forEach(element => {
|
{
|
||||||
if(expet != element){
|
let lst = this._pets.reverse();
|
||||||
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET));
|
lst.forEach(element => {
|
||||||
}
|
if(expet != element && element.isAlive()){
|
||||||
});
|
dst.push(new SkillTarget(skill, param.srcplayer, param.srcpet, element, GameUnitType.PET));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -219,7 +224,7 @@ export class PlayerHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public addSkill(skillid: number, count: number = 1): Skill[]{
|
public addSkill(skillid: number, count: number = 1): Skill[]{
|
||||||
return this._self.addSkill(skillid, count);
|
return this._self? this._self.addSkill(skillid, count): null;
|
||||||
};
|
};
|
||||||
|
|
||||||
public handleSkill(skillid: number, count: number, param: SkillParam, pet: PetHandler):SkillTarget[]{
|
public handleSkill(skillid: number, count: number, param: SkillParam, pet: PetHandler):SkillTarget[]{
|
||||||
@ -303,7 +308,7 @@ export class PlayerHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public addEM(value: number): number{
|
public addEM(value: number): number{
|
||||||
return this._self.addEM(value);
|
return this._self? this._self.addEM(value): 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
public getEM(): number{
|
public getEM(): number{
|
||||||
@ -321,7 +326,7 @@ export class PlayerHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public totalAP(){
|
public totalAP(){
|
||||||
return this._self.totalAP();
|
return this._self? this._self.totalAP(): 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
public setFriend(aplayer: PlayerHandler){
|
public setFriend(aplayer: PlayerHandler){
|
||||||
@ -333,16 +338,16 @@ export class PlayerHandler {
|
|||||||
//todo:
|
//todo:
|
||||||
};
|
};
|
||||||
|
|
||||||
public reborn(){
|
public reborn(): boolean{
|
||||||
return this._self.reborn();
|
return this._self? this._self.reborn(): false;
|
||||||
};
|
};
|
||||||
|
|
||||||
public attack(apet: PetHandler, param: SkillParam, ev: number, isAtkBack: boolean = false){
|
public attack(apet: PetHandler, param: SkillParam, ev: number, isAtkBack: boolean = false){
|
||||||
return this._self.attack(apet, param, ev, isAtkBack);
|
return this._self? this._self.attack(apet, param, ev, isAtkBack): 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
public beSilent(count: number){
|
public beSilent(count: number){
|
||||||
return this._self.beSilent(count);
|
return this._self? this._self.beSilent(count): 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
public canBeKill(subhp: number): boolean{
|
public canBeKill(subhp: number): boolean{
|
||||||
@ -372,10 +377,12 @@ export class PlayerHandler {
|
|||||||
this.simpleCheckSkills(apet._dieSkills);
|
this.simpleCheckSkills(apet._dieSkills);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(apet.isDead()){
|
if(apet.isAlive()){
|
||||||
this.delPet(apet);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this.delPet(apet);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -383,6 +390,11 @@ export class PlayerHandler {
|
|||||||
this._owner.onUpdatePetNotify(apet);
|
this._owner.onUpdatePetNotify(apet);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param apet : 新增的光环怪
|
||||||
|
* @param only_checkother : 只检查别人加给pet的光环
|
||||||
|
*/
|
||||||
public onHaloAdd(apet: PetHandler, only_checkother: boolean = false){
|
public onHaloAdd(apet: PetHandler, only_checkother: boolean = false){
|
||||||
let lst: PetHandler[] = [];
|
let lst: PetHandler[] = [];
|
||||||
if(only_checkother){
|
if(only_checkother){
|
||||||
@ -409,7 +421,7 @@ export class PlayerHandler {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if(this._self != apet){
|
if(this._self != apet && this._self){
|
||||||
this._self.addEffHalo(apet);
|
this._self.addEffHalo(apet);
|
||||||
if(apet.addEffHalo(this._self)){
|
if(apet.addEffHalo(this._self)){
|
||||||
lst.push(this._self);
|
lst.push(this._self);
|
||||||
@ -463,7 +475,7 @@ export class PlayerHandler {
|
|||||||
return this._self;
|
return this._self;
|
||||||
}
|
}
|
||||||
return this._pets.find((item: PetHandler) =>{
|
return this._pets.find((item: PetHandler) =>{
|
||||||
return item.isTaunt();
|
return item.isAlive() && item.isTaunt();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -477,7 +489,7 @@ export class PlayerHandler {
|
|||||||
ncnt++;
|
ncnt++;
|
||||||
}
|
}
|
||||||
this._pets.forEach((item: PetHandler) =>{
|
this._pets.forEach((item: PetHandler) =>{
|
||||||
if(item.isTaunt() && this._self != expet){
|
if(item.isTaunt() && item != expet && item.isAlive()){
|
||||||
lst.push(item);
|
lst.push(item);
|
||||||
ncnt++;
|
ncnt++;
|
||||||
}
|
}
|
||||||
@ -495,7 +507,7 @@ export class PlayerHandler {
|
|||||||
ncnt++;
|
ncnt++;
|
||||||
}
|
}
|
||||||
this._pets.forEach((item: PetHandler) =>{
|
this._pets.forEach((item: PetHandler) =>{
|
||||||
if(this._self != expet){
|
if(item != expet && item.isAlive()){
|
||||||
lst.push(item);
|
lst.push(item);
|
||||||
ncnt++;
|
ncnt++;
|
||||||
}
|
}
|
||||||
@ -566,7 +578,7 @@ export class PlayerHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let reslst: SkillTarget[] = [];
|
let reslst: SkillTarget[] = [];
|
||||||
this._self.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
|
this._self && this._self.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
|
||||||
if(res){
|
if(res){
|
||||||
reslst = reslst.concat(res);
|
reslst = reslst.concat(res);
|
||||||
}else{
|
}else{
|
||||||
@ -577,6 +589,9 @@ export class PlayerHandler {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this._pets.forEach((item: PetHandler) => {
|
this._pets.forEach((item: PetHandler) => {
|
||||||
|
if(!item.isAlive()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
sp.srcpet = item;
|
sp.srcpet = item;
|
||||||
item.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
|
item.checkSkills(tgttype, tgtvalue, sp, (skill: Skill, ap: SkillParam, res: SkillTarget[])=>{
|
||||||
if(res){
|
if(res){
|
||||||
@ -638,6 +653,15 @@ export class PlayerHandler {
|
|||||||
return reslst;
|
return reslst;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
checkPets(){
|
||||||
|
for(let i = this._pets.length - 1; i > 0; i--){
|
||||||
|
let pet = this._pets[i];
|
||||||
|
if(pet && !pet.isAlive()){
|
||||||
|
this.delPet(pet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
resetTotalCard(){
|
resetTotalCard(){
|
||||||
this._totalcc = 0;
|
this._totalcc = 0;
|
||||||
};
|
};
|
||||||
|
@ -406,7 +406,7 @@ export class Skill {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import {PlayerHandler} from "../Handler/PlayerHandler";
|
import {PlayerHandler} from "../Handler/PlayerHandler";
|
||||||
import {PetHandler} from "../Handler/PetHandler";
|
import {PetHandler} from "../Handler/PetHandler";
|
||||||
import { Skill } from "./Skill";
|
import { Skill } from "./Skill";
|
||||||
import { GameUnitType } from "./SkillConst";
|
import { GameUnitType, SkillEffectType } from "./SkillConst";
|
||||||
import { SKillEffectData, SkillInfoData, SkillInfoMsg } from "../../../message/SkillInfo";
|
import { SKillEffectData, SkillInfoData, SkillInfoMsg } from "../../../message/SkillInfo";
|
||||||
|
|
||||||
export class SkillParam{
|
export class SkillParam{
|
||||||
@ -64,6 +64,7 @@ export class SkillTarget{
|
|||||||
srcpet: PetHandler;
|
srcpet: PetHandler;
|
||||||
srcskill: Skill;
|
srcskill: Skill;
|
||||||
srcskillid: number;
|
srcskillid: number;
|
||||||
|
srcskilltype: number;
|
||||||
dst: PlayerHandler | PetHandler;
|
dst: PlayerHandler | PetHandler;
|
||||||
dsttype: GameUnitType;
|
dsttype: GameUnitType;
|
||||||
|
|
||||||
@ -77,6 +78,7 @@ export class SkillTarget{
|
|||||||
this.srcpet = spet;
|
this.srcpet = spet;
|
||||||
this.srcskill = skill;
|
this.srcskill = skill;
|
||||||
this.srcskillid = skill._id;
|
this.srcskillid = skill._id;
|
||||||
|
this.srcskilltype = skill._data.effect_typeid;
|
||||||
this.dst = dstobj;
|
this.dst = dstobj;
|
||||||
this.dsttype = dsttype;
|
this.dsttype = dsttype;
|
||||||
this.lasttime = skill._data.indicate_time;
|
this.lasttime = skill._data.indicate_time;
|
||||||
@ -94,6 +96,29 @@ export class SkillTarget{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public isHurtSkill(){
|
||||||
|
let effctid = this.srcskilltype;
|
||||||
|
return effctid == SkillEffectType.HURT_POWER || effctid == SkillEffectType.HURT_HP ||
|
||||||
|
effctid == SkillEffectType.HURT_ALL || effctid == SkillEffectType.ATTACK ||
|
||||||
|
effctid == SkillEffectType.ATTACK_BACK;
|
||||||
|
};
|
||||||
|
|
||||||
|
public targetIsPet(){
|
||||||
|
return this.dsttype == GameUnitType.PET || this.dsttype == GameUnitType.BATTLEUNIT;
|
||||||
|
};
|
||||||
|
|
||||||
|
public targetPlayer(): PlayerHandler{
|
||||||
|
if(this.dsttype == GameUnitType.NONE || !this.dst){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.dsttype == GameUnitType.PLAYER){
|
||||||
|
return (this.dst as PlayerHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (this.dst as PetHandler)._owner;
|
||||||
|
};
|
||||||
|
|
||||||
public checkRes(){
|
public checkRes(){
|
||||||
if(!this.res){
|
if(!this.res){
|
||||||
this.res = [];
|
this.res = [];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user