BD3Modding-Osiris编辑器基础
在本指南中,我们将介绍如何开始使用故事编辑器(也称为 Osiris 编辑器),包括如何构建和重新加载你的脚本、处理构建错误以及进行基本调试。在开始本指南之前,我们建议阅读 Introduction to Osiris 以了解 Osiris 的工作原理并了解目标和数据库等概念。 打开Story Editor在编辑器的主工具栏中,点击书本图标打开故事编辑器。或者,如果视口被选中,你可以使用键盘快捷键 Ctrl+X。 故事编辑器是一个用于创建和修改故事目标的工具。 创建一个脚本文件让我们首先了解用于组织和加载脚本的系统。 故事编辑器左侧的面板是 goal hierarchy。该面板显示了在博德之门3中使用的所有目标以及我们为它们设置的结构。注意列表中的一些目标是可折叠的 - 这意味着它们有子目标。 在放置目标之前,需要理解几个重要规则。 首先,goals are executed from top to bottom。**这是 Osiris 的整体规则,不仅仅适用于目标。例如,在上面的截图中,GLO_HagCombatStates 将在 GLO_HagDoubles...
BD3Modding-添加新职业或子职
让我们构建一个虚构的职业:战斗法师(Battlemage),它精通重甲和多种双手武器。我们还会让它能够使用一些法术。 首先为我们的职业创建一个新的模组。在本指南中,我们将使用Battlemage作为模组名称。 定义 Progressions第一步是为我们的新职业定义进度系统。这将告诉游戏角色在每个等级会获得什么。 打开Uuid Object编辑器。 我们将在我们的模组中添加一个Progressions表。 通过双击Progressions表,开始编辑您新创建的表格。 让我们从Name列开始。这是一个将在数据中使用的技术名称,因此请避免使用空格。添加名称并按下Enter键后,UUID列应会自动填充。 让我们将Level设置为1,将ProgressionType设置为0。这告诉游戏这确实是一个职业进程。 接下来,我们需要填写TableUUID。这个TableUUID在一个职业的所有等级中是共享的。这里有一个小技巧,可以先将UUID列中的值复制并粘贴到TableUUID中…… …然后右键单击UUID单元格,从下拉菜单中选择“Regenerate...
BD3Modding-添加一个新法术(基础)
定位法术数据通过菜单栏右上角的条形图标打开Stats Editor。 在左侧列中,会有一个项目列表。打开与您的模组名称相对应的项目——它应该与您项目的名称相同。在本指南中,我们的模组名为 SimpleNewSpell。展开该项目以查看其子文件夹。 在这里,您会看到多个可供打开和修改的部分。要创建法术,请前往 SpellData 并点击“+”符号。 这将打开一个下拉菜单,显示游戏中可用的各种法术类型。 对于我们正在制作的目标法术,您需要添加Target和Projectile法术数据。您可能需要展开SpellData文件夹才能看到新添加的内容 制作目标法术 Target Spell我们将制作一个触摸法术(施法者需要接触目标才能施放的法术),该法术会在目标上爆炸。爆炸将对区域内的所有人造成火焰伤害,并为施法者提供治疗。 打开您新创建的Target法术数据。 对于目标法术,有一些必填字段,必须填写才能确保法术在游戏中正确执行。我们将介绍这些必填字段,以及上述示例中所需的一些额外字段。 Name (Technical...
BD3Modding-Toolkit编辑器基础
打开或者创建项目当你打开编辑器时,会看到Project Browser。在这里,你可以打开一个已有项目(模组),或者创建一个新项目。如果你已经有现有项目,它们将会显示在这里。只需选择你想要打开的项目即可。 要创建一个新的模组,选择新建项目标签 [1],然后为你的模组选择一个项目名称 [2],并点击创建 [3]。在本示例中,我将其命名为“LavaStatueMod”。 Loading a Level / 加载关卡选择项目并等待加载完成后,您将会看到一个选择关卡的界面。对于许多操作,您并不需要主动打开某个关卡,因此可以直接点击取消——但如果您想测试自己的工作,就需要加载一个关卡。 在搜索栏中输入WLD_Crashsite_D [1]。这个关卡是第一章的起始部分,发生在飞船鹦鹉螺号坠毁到海滩之后。点击该关卡的缩略图 [2],然后点击选择 [3]...
C++03-提升
1 模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 1.2 函数模板 C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 1.2.1 函数模板语法函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 语法: 12template<typename T>函数声明或定义 解释: template — 声明创建模板 typename — 表面其后面的符号是一种数据类型,可以用class代替 T — 通用的数据类型,名称可以替换,通常为大写字母 12345678910111213141516//利用模板提供通用的交换函数template<typename T>void mySwap(T& a, T& b){ T temp = a; a = b; b =...
算法与数据结构04-树与二叉树
1. 树的基本概念树是由节点和边组成的数据结构,每个节点可以有多个子节点,但只能有一个父节点 n叉树:每个节点最多可以有n个子节点 树的深度(depth):是指从根节点到最远叶子节点的层数 节点的深度:从根节点到该节点的唯一路径上的边的数量 节点的高度:从该节点到最远叶子节点的路径上的边的数量 节点的度(degree):指它的子节点数量 叶子节点(leaf):没有子节点的节点 .oomskavsjrhx{zoom: 40%;} 以上图为例,节点B深度=1,高度=2 以上图为例,节点F深度=2,高度=0 核心总结:树的节点代表『集合』,树的边代表『关系』 2. 树形结构的遍历方式2.1 广度优先遍历(层序遍历)借用队列,按照层序的方式依次遍历到,具体顺序如下: 2.2 深度优先遍历借用栈,对于一个节点只要有一个子节点就将其入栈,直到没有就将相关节点弹栈 将以上的序列出入做成一张大的时间戳,可以根据区间包含关系,来判断是否是父子关系 例如:对于2号和4号,显然2号的区间内包含4号,故4是2的子节点 3....
算法与数据结构03-线性结构(习题技巧与思路)
1. 环形链表判断方法-快慢指针 LeetCode 141 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。 12345678910111213class Solution {public: bool hasCycle(ListNode* head) { ListNode* fast = head, * slow = head; if (head == NULL || head->next == NULL) return false; while (fast != NULL && fast->next != NULL) { ...
算法与数据结构03-线性结构
1. 顺序表1.1 概念线性表(Linear List):由同类型数据元素构成有序序列的线性结构 表中元素个数称为线性表的长度 线性表没有元素时,称为空表 表起始位置称表头,表结束位置称表尾 线性表的结构:一段连续的存储空间、两个属性:size(表的大小),count(元素个数) 1.2 代码实现1.2.1 结构定义1234typedef struct vector { int size, count; //两个属性 int* data; //这段空间(连续的这段存储区)}vector; 1.2.2 初始化(创建)新表1234567vector* getNewVector(int n) { //创建一个新表(返回这个表头的地址) vector* p = (vector*)malloc(sizeof(vector)); //开辟顺序表本身的空间(也就是储存size,count,data这三个成员的空间) p->size = n; p->count = 0; p->data =...
算法与数据结构02-递归函数
1. 递归函数设计技巧1.1 数学归纳法带着这样的思维方式检查,可以大大减少程序错误率 基本思路: step1: 验证P(1)成立 step2: 假设P(k)成立,证明P(k+1)也成立(证明前一项正确那么后一项也正确) step3: 联合step1与step2,证明由P(1) -> P(n)成立 1.2 递归函数设计重要的三个部分 给『递归函数』一个明确的语义 实现边界条件时的程序逻辑 假设递归函数调用返回结果是正确的,实现本层函数逻辑 典型示例: 1234int f(int n){ //明确递归函数语义:f(n)用于求n的阶乘 if( n == 1 ) return 1; //实现边界条件 return f(n - 1) * n; //假设f(n-1)的实现是正确的,本层要实现阶乘就要用f(n-1)*n}
信息安全导论02-密码学基础
1. 密码学概述1.1密码学基本概念密码学的定义: 是结合数学、计算机、信息论等的综合性交叉学科 分为密码编码学(cryptography)和密码分析学(cryptanalysis) 密码编码学研究如何设计编码使信息只能被指定接收者读懂 密码分析学研究如何攻击密码系统,设计和使用密码遵守柯克霍夫准则(算法必须公开,对密钥进行保护) 密码体制组成: 明文空间M:全体明文集合 密文空间C:全体密文集合 密钥空间K:全体密钥集合 加密算法E:c = E(ke, m) 解密算法D:m = D(kd, c) 密码体制分类: 对称密码体制:加密密钥ke和解密密钥kd相同 非对称密码体制:加密密钥ke和解密密钥kd不同,也称公钥密码 密码体制设计原则: 密码算法安全强度高 安全性依赖于密钥而非算法保密性(柯克霍夫原则) 密钥空间要足够大 易于实现和使用 1.2...