PVE Контент #1

Open
opened 2025-01-11 18:44:35 +00:00 by degradin · 1 comment
Owner

Реализовать механики сражения с ботами

Реализовать механики сражения с ботами
Author
Owner

нужно придумать механику пве сражений и исследования локаций, список изначальных врагов (EnemyList), уже существующие враги для пользователей (Battles) и локации (Locations) будут находиться в бд, у каждой локации и врага есть свой массив предметов, которые могут там найтись. Каждый час в локации генерируется рандомное количество врагов в диапазоне уровней локации и в зависимости от редкости врага (например обычные враги: 3 бандита, 2 вора, 1 собака. Реже: 1 амбал бандит). Пользователь нажимает кнопку и открывается меню локаций, при нажатии на локацию, открывается ее описание и кнопки выбора действий, исследовать и охота, при исследовании персонаж может найти предметы с определенным шансом (в зависимости от редкости), так же может попасться враг, после сражения с которым так же могут выпасть предметы. При выборе охоты, появляется список противников которые сейчас есть в этой локации, пользователь выбирает врага и запускается сражение, соответственно, так как механика сражения может использоваться в разных других механиках и командах, это должна быть отдельная функция, так например после сражения в миссии с ограблением магазина, должна продолжиться миссия ограбления, после сражения в исследовании, должно продолжиться исследование, если пользователь не проиграл. Итак, пользователь выбрал врага в охоте, началось сражение, если ктото другой нажмет на этого врага, ему напишет, что, ктото уже сражается, если игрок победит, враг пропадет, если проиграет, враг останется с теми же хп

const { DataTypes } = require('sequelize');
const sequelize = require('../db');

const Enemy = sequelize.define('enemy', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.TEXT,
allowNull: false,
},
level: {
type: DataTypes.INTEGER,
allowNull: false,
},
hp: {
type: DataTypes.INTEGER,
allowNull: true
},
damage: {
type: DataTypes.INTEGER,
allowNull: false,
},
loot: {
type: DataTypes.ARRAY(DataTypes.INTEGER),
allowNull: true, defaultValue: []
},
rarity: {
type: DataTypes.INTEGER,
allowNull: false,
},
});

module.exports = Enemy;

const { DataTypes } = require('sequelize');
const sequelize = require('../db');

const Location = sequelize.define('location', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
description: {
type: DataTypes.TEXT,
allowNull: false,
},
enemies: {
type: DataTypes.ARRAY(DataTypes.INTEGER),
allowNull: true,
defaultValue: []
},
level: {
type: DataTypes.INTEGER,
allowNull: false,
},
loot: {
type: DataTypes.ARRAY(DataTypes.INTEGER),
allowNull: true,
defaultValue: []
},
rarity: {
type: DataTypes.INTEGER,
allowNull: false,
},
});

module.exports = Location;

const { DataTypes } = require('sequelize');
const sequelize = require('../db');

const Battle = sequelize.define('battle', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
enemy: {
type: DataTypes.INTEGER,
allowNull: false,
},
location: {
type: DataTypes.INTEGER,
allowNull: false,
},
character: {
type: DataTypes.BIGINT,
allowNull: false,
},
enemy_hp: {
type: DataTypes.INTEGER,
allowNull: false,
},
status: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: "inactive"
},
});

module.exports = Location;

нужно придумать механику пве сражений и исследования локаций, список изначальных врагов (EnemyList), уже существующие враги для пользователей (Battles) и локации (Locations) будут находиться в бд, у каждой локации и врага есть свой массив предметов, которые могут там найтись. Каждый час в локации генерируется рандомное количество врагов в диапазоне уровней локации и в зависимости от редкости врага (например обычные враги: 3 бандита, 2 вора, 1 собака. Реже: 1 амбал бандит). Пользователь нажимает кнопку и открывается меню локаций, при нажатии на локацию, открывается ее описание и кнопки выбора действий, исследовать и охота, при исследовании персонаж может найти предметы с определенным шансом (в зависимости от редкости), так же может попасться враг, после сражения с которым так же могут выпасть предметы. При выборе охоты, появляется список противников которые сейчас есть в этой локации, пользователь выбирает врага и запускается сражение, соответственно, так как механика сражения может использоваться в разных других механиках и командах, это должна быть отдельная функция, так например после сражения в миссии с ограблением магазина, должна продолжиться миссия ограбления, после сражения в исследовании, должно продолжиться исследование, если пользователь не проиграл. Итак, пользователь выбрал врага в охоте, началось сражение, если ктото другой нажмет на этого врага, ему напишет, что, ктото уже сражается, если игрок победит, враг пропадет, если проиграет, враг останется с теми же хп const { DataTypes } = require('sequelize'); const sequelize = require('../db'); const Enemy = sequelize.define('enemy', { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, name: { type: DataTypes.STRING, allowNull: false, }, description: { type: DataTypes.TEXT, allowNull: false, }, level: { type: DataTypes.INTEGER, allowNull: false, }, hp: { type: DataTypes.INTEGER, allowNull: true }, damage: { type: DataTypes.INTEGER, allowNull: false, }, loot: { type: DataTypes.ARRAY(DataTypes.INTEGER), allowNull: true, defaultValue: [] }, rarity: { type: DataTypes.INTEGER, allowNull: false, }, }); module.exports = Enemy; const { DataTypes } = require('sequelize'); const sequelize = require('../db'); const Location = sequelize.define('location', { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, name: { type: DataTypes.STRING, allowNull: false, }, description: { type: DataTypes.TEXT, allowNull: false, }, enemies: { type: DataTypes.ARRAY(DataTypes.INTEGER), allowNull: true, defaultValue: [] }, level: { type: DataTypes.INTEGER, allowNull: false, }, loot: { type: DataTypes.ARRAY(DataTypes.INTEGER), allowNull: true, defaultValue: [] }, rarity: { type: DataTypes.INTEGER, allowNull: false, }, }); module.exports = Location; const { DataTypes } = require('sequelize'); const sequelize = require('../db'); const Battle = sequelize.define('battle', { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, enemy: { type: DataTypes.INTEGER, allowNull: false, }, location: { type: DataTypes.INTEGER, allowNull: false, }, character: { type: DataTypes.BIGINT, allowNull: false, }, enemy_hp: { type: DataTypes.INTEGER, allowNull: false, }, status: { type: DataTypes.STRING, allowNull: false, defaultValue: "inactive" }, }); module.exports = Location;
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: degradin/CampFirePlay#1
No description provided.