Skip to content

Commit

Permalink
feat: made clans the same level they are in base game. also added kil…
Browse files Browse the repository at this point in the history
…l count
  • Loading branch information
Picoseconds committed Jul 29, 2020
1 parent b599e61 commit 667397a
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 7 deletions.
2 changes: 2 additions & 0 deletions src/moomoo/Client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import WebSocket from "ws";
import Player from "./Player";

export default class Client {
public tribeJoinQueue: Player[] = [];

constructor(
public id: string,
public socket: WebSocket,
Expand Down
53 changes: 50 additions & 3 deletions src/moomoo/Game.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import FileAsync from 'lowdb/adapters/FileAsync';
import { PacketFactory } from "../packets/PacketFactory";
import { getWeaponDamage, getWeaponAttackDetails, getItemCost, getPlaceable } from "../items/items";
import { gameObjectSizes, GameObjectType } from "../gameobjects/gameobjects";
import { isNull } from 'util';

let currentGame: Game | null = null;

Expand Down Expand Up @@ -120,6 +121,13 @@ export default class Game {
}

this.state.gameObjects.filter(gameObj => gameObj.ownerSID != client.player?.id);

let tribeIndex = this.state.tribes.findIndex(
tribe => tribe.ownerSID == client.player?.id
);

if (tribeIndex > -1)
this.state.removeTribe(tribeIndex);
}
});

Expand Down Expand Up @@ -394,11 +402,14 @@ export default class Game {
);

for (let hitPlayer of hitPlayers) {
if (hitPlayer.clanName == player.clanName && hitPlayer.clanName != null) continue;

let dmg = getWeaponDamage(player.weapon, player.weaponVariant);

hitPlayer.health -= dmg;
if (hitPlayer.health <= 0 && hitPlayer.client) {
this.killPlayer(hitPlayer);
player.kills++;
} else {
let attackDetails = getWeaponAttackDetails(player.weapon);
let knockback = attackDetails.kbMultiplier * 0.3;
Expand Down Expand Up @@ -706,14 +717,37 @@ export default class Game {
let tribe = this.state.tribes.find(
(tribe) => tribe.name === packet.data[0]
);
let ownerClient = this.state.players.find(player => player.id === tribe?.ownerSID)?.client;

if (tribe) {
client.player.clanName = tribe.name;
ownerClient?.tribeJoinQueue.push(client.player);
ownerClient?.socket.send(
packetFactory.serializePacket(
new Packet(
PacketType.JOIN_REQUEST,
[client.player.id, client.player.name]
)
)
)
}

if (!tribe.membersSIDs.includes(client.player.id))
tribe.membersSIDs.push(client.player.id);
}
break;
case PacketType.CLAN_ACC_JOIN:
if (client.tribeJoinQueue.length && client.player && packet.data[1]) {
let tribe = this.state.tribes.find(
(tribe) => tribe.ownerSID === client.player?.id
);
let player = client.tribeJoinQueue[0];

if (tribe && player.clanName === null) {
player.clanName = tribe.name;

this.state.joinClan(player, tribe);
}
}

client.tribeJoinQueue.splice(0, 1);
break;
case PacketType.AUTO_ATK:
if (client.player)
Expand Down Expand Up @@ -786,6 +820,19 @@ export default class Game {
}
}
break;
case PacketType.LEAVE_CLAN:
if (client.player) {
let tribeIndex = this.state.tribes.findIndex(tribe => tribe.membersSIDs.includes(client.player?.id as number));
let tribe = this.state.tribes[tribeIndex];

if (tribe && tribe.ownerSID == client.player.id) {
this.state.removeTribe(tribeIndex);
client.tribeJoinQueue = [];
} else {
this.state.leaveClan(client.player, tribeIndex);
}
}
break;
}
}
}
Expand Down
91 changes: 90 additions & 1 deletion src/moomoo/GameState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,38 @@ export default class GameState {
this.game = game;
}

joinClan(player: Player, tribe: Tribe) {
if (!tribe.membersSIDs.includes(player.id))
tribe.membersSIDs.push(player.id);

this.updateClanPlayers(tribe);
}

updateClanPlayers(tribe: Tribe) {
let packetFactory = PacketFactory.getInstance();
let data: (string | number)[] = [];

for (let memberSID of tribe.membersSIDs) {
let player = this.players.find(player => player.id == memberSID);
if (player)
data.push(player.id, player.name);
}

for (let memberSID of tribe.membersSIDs) {
let player = this.players.find(player => player.id == memberSID);
let client = player?.client;

if (client) {
client.socket.send(
packetFactory.serializePacket(
new Packet(PacketType.SET_CLAN_PLAYERS, data)
)
);
console.log(data);
}
}
}

addPlayer(sid: number, ownerID: string, client: Client, game: Game) {
return this.players[
this.players.push(new Player(sid, ownerID, new Vec2(0, 0), game, client)) - 1
Expand All @@ -35,7 +67,64 @@ export default class GameState {
}

return this.tribes[
this.tribes.push({name: name, ownerSID: ownerSID, membersSIDs: [ownerSID]}) - 1
this.tribes.push({ name: name, ownerSID: ownerSID, membersSIDs: [ownerSID] }) - 1
];
}

removeTribe(tribeIndex: number) {
let packetFactory = PacketFactory.getInstance();
let tribe = this.tribes[tribeIndex];

if (tribe) {
for (let client of this.game.clients) {
client.socket?.send(packetFactory.serializePacket(new Packet(PacketType.CLAN_DEL, [tribe.name])));
}

for (let memberSID of tribe.membersSIDs) {
let player = this.players.find(player => player.id == memberSID);
let client = player?.client;

if (player)
player.clanName = null;

if (client) {
client.socket.send(
packetFactory.serializePacket(
new Packet(PacketType.PLAYER_SET_CLAN, [null, 0])
)
);

if (client.player)
client.player.isClanLeader = false;
}
}

this.tribes.splice(tribeIndex, 1);
}
}

leaveClan(player: Player, tribeIndex: number) {
let packetFactory = PacketFactory.getInstance();
let client = player?.client;

this.tribes[tribeIndex].membersSIDs = this.tribes[tribeIndex].membersSIDs.filter(
memberSID => memberSID != player.id
);

if (player)
player.clanName = null;

if (client) {
client.socket.send(
packetFactory.serializePacket(
new Packet(PacketType.PLAYER_SET_CLAN, [null, 0])
)
);

if (client.player)
client.player.isClanLeader = false;
}

this.updateClanPlayers(this.tribes[tribeIndex]);
}
}
19 changes: 17 additions & 2 deletions src/moomoo/Player.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,22 @@ export default class Player extends Entity {
public clanName: string | null = null;
public isClanLeader = false;

public kills = 0;
private _kills: number = 0;

public get kills(): number {
return this._kills;
}

public set kills(newKills: number) {
let packetFactory = PacketFactory.getInstance();
this.client?.socket.send(
packetFactory.serializePacket(
new Packet(PacketType.UPDATE_STATS, ["kills", newKills, 1])
)
);
this._kills = newKills;
}

public dead = false;

public inTrap = false;
Expand Down Expand Up @@ -206,7 +221,7 @@ export default class Player extends Entity {
return false;
}

gameState?.gameObjects.push(newGameObject);
gameState?.gameObjects.push(newGameObject);

return true;
}
Expand Down
1 change: 1 addition & 0 deletions src/packets/PacketFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ packetTypeMapping[PacketType.PLAYER_ADD] = { value: "2", side: Side.Client };
packetTypeMapping[PacketType.UPDATE_STATS] = { value: "9", side: Side.Client };
packetTypeMapping[PacketType.IO_INIT] = { value: "io-init", side: Side.Client };
packetTypeMapping[PacketType.HEALTH_CHANGE] = { value: "t", side: Side.Client };
packetTypeMapping[PacketType.JOIN_REQUEST] = { value: "an", side: Side.Client };

let reversePacketTypeMapping: ReverseMapping[] = [];

Expand Down
3 changes: 2 additions & 1 deletion src/packets/PacketType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ enum PacketType {
DEATH,
CLAN_NOTIFY_SERVER,
CLAN_NOTIFY_CLIENT,
HEALTH_CHANGE
HEALTH_CHANGE,
JOIN_REQUEST
}

export { PacketType };

0 comments on commit 667397a

Please sign in to comment.