tModLoader随机掉落模组编写
pre { overflow-y: auto; max-height: 400px }
img { max-width: 500px; max-height: 300px }
1. 整体思路
目标是实现击杀低敌怪后有概率掉落任意物品,包括其他模组中的内容,数量取决于该物品的最大堆叠数,同时保留原本可能的掉落物。
随机掉落的思路比较简单,重写GlobalNPC中的死亡或者掉落方法即可。在1.4以前的tModLoader可以重写NPCLoot方法,换成一个随机物品即可。1.4之后看了下源码,GLobalNPC下没有NPCLoot方法了,有可能其他的方法可以重写比如ModifyNPCLoot(看着比较像,但没试过)。我这边采用的是重写PreKill(NPC)方法。
获取最大堆叠数则是要获取id对应的Item,这里有个坑,我一开始用的是ItemLoader.GetItem().Item.maxStack,没注意到ItemLoader.GetItem()这个方法获取的是非原版的物品,然后一直返回null,运行之后的报错又恰好行号跟我代码对不上,然后折腾了好久才发现。最后用的是item.SetDefaults(itemId)来获取Item。
2. 核心代码
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
using System;
namespace RandomDropMod
{
public class RandomDropModNPC : GlobalNPC
{
private static Random random = new Random();
public override bool PreKill(NPC npc)
{
if (random.Next(100) > ModContent.GetInstance<RandomDropModConfig>().DropProbability)
{
return base.PreKill(npc);
}
// 随机生成物品
int itemId = random.Next(ItemLoader.ItemCount);
Item item = new Item();
item.SetDefaults(itemId);
// 随机生成物品的数量
int maxStack = item.maxStack;
/*
最大堆叠, 生成数量
1, 1
2~10, 1~(maxStack-1)
11~30, 5~(maxStack-5)
31~100, 15~(maxStack-15)
>100, 30~60
*/
int count = 1;
if (maxStack > 1)
{
if (maxStack < 10)
{
count = random.Next(maxStack - 1) + 1;
}
else if (maxStack < 30)
{
count = random.Next(maxStack - 5) + 5;
}
else if (maxStack < 100)
{
count = random.Next(maxStack - 15) + 15;
}
else
{
count = random.Next(30) + 30;
}
}
// 生成物品
Item.NewItem(null, npc.position, itemId, count);
return base.PreKill(npc);
}
}
}
3. 设置用户可调整掉落概率
参考官方提供的ExampleMod,添加一个Config即可。
using System.ComponentModel;
using Terraria.ModLoader.Config;
namespace RandomDropMod
{
public class RandomDropModConfig : ModConfig
{
public override ConfigScope Mode => ConfigScope.ServerSide;
[Label("Chance to drop item")]
[Slider]
[SliderColor(255, 255, 50)]
[Range(0, 100)]
[Increment(1)]
[DefaultValue(20)]
public int DropProbability { get; set; }
}
}
tModLoader随机掉落模组编写的更多相关文章
- 软件工程(QLGY2015)第二次作业点评(随机挑选20组点评)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 说明:随机挑选20组点评,大家可以看看blog名字,github项目名字,看看那种是更好的,可以学习,每个小组都会反应出一些问题,希望能 ...
- 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)
实现的功能: l APP控制月球灯 l 本地月球灯控制 l APP控制"大白"颜色,实现各种颜色变身 l 门状态传感器状态APP显示 l 网络状态指示灯,连接服务器长亮, ...
- MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率
1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...
- android camera(一):camera模组CMM介绍
一.摄像头模组(CCM)介绍: 1.camera特写 摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件.先来张特写,各种样子的都有,不过我前一段 ...
- 【转】android camera(一):camera模组CMM介绍
关键词:android camera CMM 模组 camera参数平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者:xubin ...
- led模组的优点和却点
插件模组 1.是指DIP封装的灯将灯脚穿过PCB板,经由过程焊接将锡灌满在灯孔内,由这种工艺做成的LED模组便是插灯模组:益处是视角年夜,亮度高,散热好:谬误舛错是像素密度小. 表贴模组 1.表贴也叫 ...
- 二维条码扫描模组在肯德基KFC的无纸化点餐解决方案
在如今提倡节约资源的环境下,肯德基在品牌发展中,逐渐实现无纸化点餐,不仅节约了纸质点餐单,而且还具有节约资源的示范作用.而其中二维码扫描模组是这套无纸化点餐方案的重点,在整套设备中,加入二维码扫描模组 ...
- FreeSWITCH 增删模组
今天在尝试FreeSWITCH新功能时,遇到一个问题,就是该功能所需要的模组没有加载,导致写了好久的代码不能看到效果,让人很是忧伤啊! 再此,将FS模组增删的方法记录下,以方便遇到同样问题的童鞋. 具 ...
- android camera(一):camera模组CMM介绍【转】
转自:https://blog.csdn.net/kevinx_xu/article/details/8821818 androidcmm图像处理工作手机三星 关键词:android camera ...
- C# 组件模组引用第三方组件问题
对接上一文章由于是动态加载指定程序集,会把当前目录下所有dll都加载进来.如果像sqlite这种第三组件调用了由C.C++非.net语言所以生成的Dll.因为自动生成的原因.会把非C#生成的dll都加 ...
随机推荐
- 解决java.sql.SQLException: null, message from server: "Host 'XXX' is not allowed to connect异常
Sqoop连接MySQL报异常.这个异常是数据库只允许localhost或127.0.0.1访问,不允许远程访问.我用的本机IP都不行. 解决办法:修改访问权限即可. 打开cmd,进入mysql fl ...
- flume往kafka中导入数据
1.编辑flume的配置文件 a1.sources = r1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = ...
- 学习Vue踩过的坑
1.用Vue绑定方法的时候里面的methods:要加s!!! 2.v-on只有在事件监听(@click=" 方法名")和不需要参数时候才不要加 ( ),在胡子写法中{{ fun() ...
- 1903021126 申文骏 Java 第四周作业 Java分支语句学习
项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 Java第四周作业 博客名称 1903021126 申文骏 Java 第四周作业 Java分支语句学习 要求 每道题要有题目,代码( ...
- vue3 ts vite
npm init vite@latest npm install -D sassnpm i vantnpm i vite-plugin-style-import@1.4.1 -Dvite.config ...
- 类内函数的override问题-方法
Question: have a base class with a virtual function: class Base { public: virtual void Function(); } ...
- 虚拟机安装windows 7 32位 + sqlserver 2000
安装包网盘地址:(https://pan.baidu.com/s/1ZoC-cTafBi8zZbCkvvmvNA?pwd=x1y2 提取码:x1y2 ) VMware 安装win7 32 位 http ...
- vue导出文件
/**导出 */ async toExcel() { // let result = await this.axios({ // method: 'get', // url: `issdc-manag ...
- pytorch卷积模块
nn.Conv2d() 常用的参数有in_channels,out_channels,kernel_size,stride,padding; 除此之外还有参数dilation,groups,bias ...
- sql server 连接 EXCEL 直接查询
1 SQL SERVER 中 查看有无访问接口,以下其中任何一个即可. 没有则下载 Microsoft Access Database Engine 2016 Redistributable (M ...