RPG游戏-道具系统

news/2024/12/28 1:59:27/

(一)服务器端

在数据库结构中,一个角色对应多个道具物品。
在这里插入图片描述

(1)道具类

1.道具定义:

using SkillBridge.Message;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace Common.Data
{public enum ItemFuncition //物品功能 {RecoverHP, RecoverMP,AddBuff,AddExp,AddMoney,AddItem,AddSkillPoint,}class ItemDefine{public int ID { get; set; }public string Name { get; set; }public string Description { get; set; }public ItemType Type{ get; set; }public string Category { get; set; }public bool CanUse { get; set; }public int Price { get; set; }public int SellPrice { get; set; }public ItemFuncition Funcition { get; set; }public int Param { get; set; }public List<int> Params { get; set; }}
}

2.道具实体函数

namespace GameServer.Models
{class Item{TCharacterItem dbItem;public int ItemID;public int Count;public Item(TCharacterItem item){this.dbItem = item;this.ItemID = (short)item.ItemID;this.Count = (short)item.ItemCount;}public void Add(int count){this.Count += count;dbItem.ItemCount = this.Count;}public void Remove(int count){this.Count -= count;dbItem.ItemCount = this.Count;}public bool Use(int count = 1){return false;}//简化输出public override string ToString(){return string.Format("ID:{0},Count:{1}", this.ItemID, this.Count);}}
}

(2)道具管理器

对当前玩家的道具进行管理。

using Common;
using GameServer.Entities;
using GameServer.Models;
using GameServer.Services;
using SkillBridge.Message;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace GameServer.Managers
{class ItemManager{Character Owner;public Dictionary<int, Item> Items = new Dictionary<int, Item>();public ItemManager(Character owner){this.Owner = owner;foreach (var item in owner.Data.Items){this.Items.Add(item.ItemID, new Item(item));}}public bool UseItem(int itemId, int count = 1) {Log.InfoFormat("[{0}]UserItem[{1}:{2}]", this.Owner.Data.ID, itemId, count);Item item = null;if(this.Items.TryGetValue(itemId,out item)){if (item.Count < count){return false;}item.Remove(count);return true;} return false;}public bool HasItem(int itemId){Item item = null;if (this.Items.TryGetValue(itemId, out item)){if (item.Count > 0){return true;}}return false;}public Item GetItem(int itemId){Item item = null;this.Items.TryGetValue(itemId, out item);Log.InfoFormat("[{0}]GetItem[{1}:{2}]", this.Owner.Data.ID, itemId, item);return item;}public bool AddItem(int itemId,int count){Item item = null;if (this.Items.TryGetValue(itemId, out item)){item.Add(count);}else{TCharacterItem dbItem = new TCharacterItem();dbItem.CharacterID = Owner.Data.ID;dbItem.Owner = Owner.Data;dbItem.ItemID = itemId;dbItem.ItemCount = count;Owner.Data.Items.Add(dbItem);item = new Item(dbItem);this.Items.Add(itemId, item);}Log.InfoFormat("[{0}]AddItem[{1}] addCount:{2}", this.Owner.Data.ID, itemId, count);DBService.Instance.Save();return true;}public bool RemoveItem(int itemId, int count){if (!this.Items.ContainsKey(itemId)){return false;}Item item = this.Items[itemId];if (item.Count < count) return false;item.Remove(count);Log.InfoFormat("[{0}]RemoveItem[{1}] removeCount:{2}", this.Owner.Data.ID, item, count);DBService.Instance.Save();return false;}public void GetItemInfos(List<NItemInfo> list){foreach(var item in this.Items){list.Add(new NItemInfo() { Id = item.Value.ItemID, Count = item.Value.Count });}}}
}

(3)角色持有物品管理器

角色持有道具管理器,且在角色创建时,读取数据库的道具数据对管理器进行初始化。

 class Character{public TCharacter Data;public ItemManager ItemManager;public Character(CharacterType type,TCharacter cha){this.ItemManager = new ItemManager(this);this.ItemManager.GetItemInfos(this.Info.Items);}}

(二)客户端

1.道具实体函数

客户端不接触DB 所以直接取的协议的NItemInfo

using SkillBridge.Message;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace Models
{public class Item{public int ID;public int Count;public Item(NItemInfo item){this.ID = item.Id;this.Count = item.Count;}//简化输出public override string ToString(){return string.Format("ID:{0},Count:{1}", this.ID, this.Count);}}
}

2.道具管理器

因为只管理自己的道具,因此这里是个单例。

using Models;
using SkillBridge.Message;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Common.Data;
public class ItemManager : Singleton<ItemManager>
{public Dictionary<int, Item> Items = new Dictionary<int, Item>();internal void Init(List<NItemInfo> items){this.Items.Clear();foreach (var info in items){Item item = new Item(info);this.Items.Add(item.ID, item);Debug.LogFormat("ItemManager Init[{0}]", item);}}public ItemDefine GetItem(int itemId){return null;}public bool UseItem(int itemId){return false;}public bool UseItem(ItemDefine item){return false;}
}

3.在进入游戏响应中初始化道具管理器

        void OnGameEnter(object sender, UserGameEnterResponse response){Debug.LogFormat("OnGameEnter:{0} {1}", response.Result, response.Errormsg);if (response.Result == Result.Success){if (response.Character != null){ItemManager.Instance.Init(response.Character.Items);//添加玩家道具}}}

http://www.ppmy.cn/news/578818.html

相关文章

RPG游戏-刷怪系统

一、数据定义 &#xff08;一&#xff09;、刷怪规则定义&#xff1a; namespace Common.Data {public class SpawnRuleDefine{public int ID { get; set; }public int MapID { get; set; }public int SpawnMonID { get; set; }public int SpawnLevel{ get;set; }public SPAWN…

Python之初级RPG小游戏

在国外网站上找到一个练习Python的小游戏感觉不错&#xff0c;自己实现了一下。 通过该练习你能学到&#xff1a; 元组字典简单定义函数和封装条件控制语句 游戏说明 以下是3个房间和1个花园&#xff1a; Hall 客厅 有一把钥匙&#xff0c;Kitchen 厨房 有一只怪物&#xf…

RPG类型游戏—1

现在中国游戏市场出现了好多那种中国类型的RPG类型的游戏&#xff0c;我自己也有几份那样的代码&#xff0c;在看他们代码的时候&#xff0c;觉得他们的代码编写有一个通病&#xff0c;就是写的太过于臃肿不够简洁&#xff0c;代码的移植性也不是很高&#xff0c;如果做同一类型…

RPG小游戏

#导包 import time import random 与学姐的台词 SCRIPT_NPC_SCHOOL_SISTER [你好&#xff01;,你好!,你是新生吗&#xff1f;,是的,想要我教你魔法吗&#xff1f;,\n1、好的 \\n2、不用了吧&#xff0c;我不和学姐学魔法&#xff01;\n]世界里的魔法清单 MAGIC_BOOKS [ [火…

RPG游戏-任务系统

一、前置部分 &#xff08;一&#xff09;、协议部分 enum QUEST_STATUS {IN_PROGRESS 0;//已接受&#xff0c;未完成COMPLATED 1;//已完成&#xff0c;未提交FINISHED 2;//已完成&#xff0c;已提交FAILED 3;//已失败 }enum QUEST_LIST_TYPE {ALL 0;IN_PROGRESS 1;FI…

Java实现RPG游戏

一&#xff0e;实验目的 掌握面向对象程序设计的方法。 明确类与对象的概念&#xff0c;掌握面向对象设计七大原则&#xff1b;掌握常见的设计模式以及类图的描述。 二、UML类图 三、实验要求 1.功能描述几乎所有的RPG游戏&#xff08;一种源自《龙与地下城》的游戏类型&…

RPG

J2ME RPG游戏边学边做&#xff08;一&#xff09;   笔者以前是做j2ee的&#xff0c;一个月前由于兴趣所致开始利用业余时间学习j2me游戏开发。在网上看了一通教程后&#xff0c;便准备动手一边学一边做一个简单的rpg游戏。虽然起点比较高&#xff0c;但感觉游戏难度越大&…

rpg游戏发展史计算机网络,PC Gamer盘点史上最经典RPG游戏TOP15

RPG角色演类游戏往往能带给玩家史诗般的剧情和难忘的战斗体验&#xff0c;今天外媒PC Gamer盘点了史上最经典RPG游戏TOP15&#xff0c;让我们一起来看看吧&#xff01; 第 2 页 史上最经典15大RPG 2 6.《质量效应2(Mass Effect 2)》 发行时间: 2010年 发行商: BioWare 与第一…