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