1.Go看源码必会知识之unsafe包
2.深入 Dify 源码,源码h源洞察 Dify RAG 核心机制
3.高手再高也不能找到多空资金线源码!源码h源
4.金手指代码是源码h源什么?
5.委比指标公式源码
Go看源码必会知识之unsafe包
前言
有看源码的朋友应该会发现,Go标准库中大量使用了unsafe.pointer,源码h源要想更好的源码h源理解源码实现,就要知道unsafe.pointer到底是源码h源变量名生成源码什么?所以今天就与大家来聊一聊unsafe包。
什么是源码h源unsafe众所周知,Go语言被设计成一门强类型的源码h源静态语言,那么他的源码h源类型就不能改变了,静态也是源码h源意味着类型检查在运行前就做了。所以在Go语言中是源码h源不允许两个指针类型进行转换的,使用过C语言的源码h源朋友应该知道这在C语言中是可以实现的,Go中不允许这么使用是源码h源处于安全考虑,毕竟强制转型会引起各种各样的源码h源麻烦,有时这些麻烦很容易被察觉,源码h源有时他们却又隐藏极深,难以察觉。大多数读者可能不明白为什么类型转换是不安全的,这里用C语言举一个简单的例子:
int main(){ double pi = 3.;double *pv = πvoid *temp = pd;int *p = temp;}在标准C语言中,任何非void类型的指针都可以和void类型的指针相互指派,也可以通过void类型指针作为中介,实现不同类型的指针间接相互转换。上面示例中,指针pv指向的空间本是一个双精度数据,占8个字节,但是经过转换后,p指向的是一个4字节的int类型。这种发生内存截断的设计缺陷会在转换后进行内存访问是存在安全隐患。我想这就是Go语言被设计成强类型语言的原因之一吧。
虽然类型转换是不安全的,但是在一些特殊场景下,使用了它,可以打破Go的类型和内存安全机制,可以绕过类型系统低效,提高运行效率。所以Go标准库中提供了一个unsafe包,之所以叫这个名字,就是不推荐大家使用,但是不是不能用,如果你掌握的特别好,还是可以实践的。
unsafe 实现原理在使用之前我们先来看一下unsafe的源码部分,标准库unsafe包中只提供了3``种方法,分别是:
func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptrSizeof(x ArbitrayType)方法主要作用是用返回类型x所占据的字节数,但并不包含x所指向的内容的大小,与C语言标准库中的Sizeof()方法功能一样,比如在位机器上,一个指针返回大小就是4字节。
Offsetof(x ArbitraryType)方法主要作用是返回结构体成员在内存中的位置离结构体起始处(结构体的第一个字段的偏移量都是0)的字节数,即偏移量,我们在注释中看一看到其入参必须是拼多多源码一个结构体,其返回值是一个常量。
Alignof(x ArbitratyType)的主要作用是返回一个类型的对齐值,也可以叫做对齐系数或者对齐倍数。对齐值是一个和内存对齐有关的值,合理的内存对齐可以提高内存读写的性能。一般对齐值是2^n,最大不会超过8(受内存对齐影响).获取对齐值还可以使用反射包的函数,也就是说:unsafe.Alignof(x)等价于reflect.TypeOf(x).Align()。对于任意类型的变量x,unsafe.Alignof(x)至少为1。对于struct结构体类型的变量x,计算x每一个字段f的unsafe.Alignof(x,f),unsafe.Alignof(x)等于其中的最大值。对于array数组类型的变量x,unsafe.Alignof(x)等于构成数组的元素类型的对齐倍数。没有任何字段的空struct{ }和没有任何元素的array占据的内存空间大小为0,不同大小为0的变量可能指向同一块地址。
细心的朋友会发发现这三个方法返回的都是uintptr类型,这个目的就是可以和unsafe.poniter类型相互转换,因为*T是不能计算偏移量的,也不能进行计算,但是uintptr是可以的,所以可以使用uintptr类型进行计算,这样就可以可以访问特定的内存了,达到对不同的内存读写的目的。三个方法的入参都是ArbitraryType类型,代表着任意类型的意思,同时还提供了一个Pointer指针类型,即像void *一样的通用型指针。
type ArbitraryType inttype Pointer *ArbitraryType// uintptr 是一个整数类型,它足够大,可以存储type uintptr uintptr上面说了这么多,可能会有点懵,在这里对三种指针类型做一个总结:
*T:普通类型指针类型,用于传递对象地址,不能进行指针运算。
unsafe.poniter:通用指针类型,用于转换不同类型的指针,不能进行指针运算,不能读取内存存储的值(需转换到某一类型的普通指针)
uintptr:用于指针运算,GC不把uintptr当指针,uintptr无法持有对象。uintptr类型的目标会被回收。
三者关系就是:unsafe.Pointer是桥梁,可以让任意类型的指针实现相互转换,也可以将任意类型的指针转换为uintptr进行指针运算,也就说uintptr是用来与unsafe.Pointer打配合,用于指针运算。画个图表示一下:
基本原理就说到这里啦,安卓系统源码接下来我们一起来看看如何使用~
unsafe.Pointer基本使用我们在上一篇分析atomic.Value源码时,看到atomic/value.go中定义了一个ifaceWords结构,其中typ和data字段类型就是unsafe.Poniter,这里使用unsafe.Poniter类型的原因是传入的值就是interface{ }类型,使用unsafe.Pointer强转成ifaceWords类型,这样可以把类型和值都保存了下来,方便后面的写入类型检查。截取部分代码如下:
// ifaceWords is interface{ } internal representation.type ifaceWords struct { typunsafe.Pointer data unsafe.Pointer}// Load returns the value set by the most recent Store.// It returns nil if there has been no call to Store for this Value.func (v *Value) Load() (x interface{ }) { vp := (*ifaceWords)(unsafe.Pointer(v))for { typ := LoadPointer(&vp.typ) // 读取已经存在值的类型/**..... 中间省略**/// First store completed. Check type and overwrite data.if typ != xp.typ { //当前类型与要存入的类型做对比 panic("sync/atomic: store of inconsistently typed value into Value")}}上面就是源码中使用unsafe.Pointer的一个例子,有一天当你准备读源码时,unsafe.pointer的使用到处可见。好啦,接下来我们写一个简单的例子,看看unsafe.Pointer是如何使用的。
func main(){ number := 5 pointer := &number fmt.Printf("number:addr:%p, value:%d\n",pointer,*pointer) floatNumber := (*float)(unsafe.Pointer(pointer)) *floatNumber = *floatNumber + 3 fmt.Printf("float:addr:%p, value:%f\n",floatNumber,*floatNumber)}运行结果:
number:addr:0xc, value:5float:addr:0xc, value:3.由运行可知使用unsafe.Pointer强制类型转换后指针指向的地址是没有改变,只是类型发生了改变。这个例子本身没什么意义,正常项目中也不会这样使用。
总结一下基本使用:先把*T类型转换成unsafe.Pointer类型,然后在进行强制转换转成你需要的指针类型即可。
Sizeof、Alignof、Offsetof三个函数的基本使用先看一个例子:
type User struct { Name string Age uint Gender bool // 男:true 女:false 就是举个例子别吐槽我这么用。。。。}func func_example(){ // sizeof fmt.Println(unsafe.Sizeof(true)) fmt.Println(unsafe.Sizeof(int8(0))) fmt.Println(unsafe.Sizeof(int())) fmt.Println(unsafe.Sizeof(int())) fmt.Println(unsafe.Sizeof(int())) fmt.Println(unsafe.Sizeof("asong")) fmt.Println(unsafe.Sizeof([]int{ 1,3,4})) // Offsetof user := User{ Name: "Asong", Age: ,Gender: true} userNamePointer := unsafe.Pointer(&user) nNamePointer := (*string)(unsafe.Pointer(userNamePointer)) *nNamePointer = "Golang梦工厂" nAgePointer := (*uint)(unsafe.Pointer(uintptr(userNamePointer) + unsafe.Offsetof(user.Age))) *nAgePointer = nGender := (*bool)(unsafe.Pointer(uintptr(userNamePointer)+unsafe.Offsetof(user.Gender))) *nGender = false fmt.Printf("u.Name: %s, u.Age: %d,u.Gender: %v\n", user.Name, user.Age,user.Gender) // Alignof var b bool var i8 int8 var i int var i int var f float var s string var m map[string]string var p *int fmt.Println(unsafe.Alignof(b)) fmt.Println(unsafe.Alignof(i8)) fmt.Println(unsafe.Alignof(i)) fmt.Println(unsafe.Alignof(i)) fmt.Println(unsafe.Alignof(f)) fmt.Println(unsafe.Alignof(s)) fmt.Println(unsafe.Alignof(m)) fmt.Println(unsafe.Alignof(p))}为了省事,把三个函数的使用示例放到了一起,首先看sizeof方法,我们可以知道各个类型所占字节大小,这里重点说一下int类型,Go语言中的int类型的具体大小是跟机器的 CPU位数相关的。如果 CPU 是 位的,那么int就占4字节,如果 CPU是位的,那么 int 就占8 字节,这里我的电脑是位的,所以结果就是8字节。
然后我们在看Offsetof函数,我想要修改结构体中成员变量,第一个成员变量是不需要进行偏移量计算的,直接取出指针后转换为unsafe.pointer,在强制给他转换成字符串类型的指针值即可。如果要修改其他成员变量,需要进行偏移量计算,才可以对其内存地址修改,所以Offsetof方法就可返回成员变量在结构体中的偏移量,也就是返回结构体初始位置到成员变量之间的字节数。看代码时大家应该要住uintptr的使用,不可以用一个临时变量存储uintptr类型,前面我们提到过用于指针运算,源码发GC不把uintptr当指针,uintptr无法持有对象。uintptr类型的目标会被回收,所以你不知道他什么时候会被GC掉,那样接下来的内存操作会发生什么样的错误,咱也不知道。比如这样一个例子:
// 切记不要这样使用p1 := uintptr(userNamePointer)nAgePointer := (*uint)(unsafe.Pointer(p1 + unsafe.Offsetof(user.Age)))最后看一下Alignof函数,主要是获取变量的对齐值,除了int、uintptr这些依赖CPU位数的类型,基本类型的对齐值都是固定的,结构体中对齐值取他的成员对齐值的最大值,结构体的对齐涉及到内存对齐,我们在下面详细介绍。
经典应用:string与[]byte的相互转换实现string与byte的转换,正常情况下,我们可能会写出这样的标准转换:
// string to []bytestr1 := "Golang梦工厂"by := []byte(s1)// []byte to stringstr2 := string(by)使用这种方式进行转换都会涉及底层数值的拷贝,所以想要实现零拷贝,我们可以使用unsafe.Pointer来实现,通过强转换直接完成指针的指向,从而使string和[]byte指向同一个底层数据。在reflect包中有·string和slice对应的结构体,他们的分别是:
type StringHeader struct { Data uintptr Lenint}type SliceHeader struct { Data uintptr Lenint Capint}StringHeader代表的是string运行时的表现形式(SliceHeader同理),通过对比string和slice运行时的表达可以看出,他们只有一个Cap字段不同,所以他们的内存布局是对齐的,所以可以通过unsafe.Pointer进行转换,因为可以写出如下代码:
func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptr0上面的代码我们通过重新构造slice header和string header完成了类型转换,其实[]byte转换成string可以省略掉自己构造StringHeader的方式,直接使用强转就可以,因为string的底层也是[]byte,强转会自动构造,省略后的代码如下:
func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptr1虽然这种方式更高效率,但是不推荐大家使用,前面也提高到了,这要是不安全的,使用当不当会出现极大的隐患,一些严重的情况recover也不能捕获。
内存对齐现在计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就对齐。
对齐的作用和原因:CPU访问内存时,并不是逐个字节访问,而是以字长(word size)单位访问。比如位的CPU,字长为4字节,那么CPU访问内存的java 源码下载单位也是4字节。这样设计可以减少CPU访问内存的次数,加大CPU访问内存的吞吐量。假设我们需要读取8个字节的数据,一次读取4个字节那么就只需读取2次就可以。内存对齐对实现变量的原子性操作也是有好处的,每次内存访问都是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。
我们来看这样一个例子:
func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptr2从结果可以看出,字段放置不同的顺序,占用内存也不一样,这就是因为内存对齐影响了struct的大小,所以有时候合理的字段可以减少内存的开销。下面我们就一起来分析一下内存对齐,首先要明白什么是内存对齐的规则,C语言的对齐规则与Go语言一样,所以C语言的对齐规则对Go同样适用:
对于结构的各个成员,第一个成员位于偏移为0的位置,结构体第一个成员的偏移量(offset)为0,以后每个成员相对于结构体首地址的 offset 都是该成员大小与有效对齐值中较小那个的整数倍,如有需要编译器会在成员之间加上填充字节。
除了结构成员需要对齐,结构本身也需要对齐,结构的长度必须是编译器默认的对齐长度和成员中最长类型中最小的数据大小的倍数对齐。
好啦,知道规则了,我们现在来分析一下上面的例子,根据我的mac使用的位CPU,对齐参数是8来分析,int、[]int、string、bool对齐值分别是4、8、8、1,占用内存大小分别是4、、、1,我们先根据第一条对齐规则分析User1:
第一个字段类型是int,对齐值是4,大小为4,所以放在内存布局中的第一位.
第二个字段类型是[]int,对齐值是8,大小为,所以他的内存偏移值必须是8的倍数,所以在当前user1中,就不能从第4位开始了,必须从第5位开始,也就偏移量为8。第4,5,6,7位由编译器进行填充,一般为0值,也称之为空洞。第9位到第位为第二个字段B.
第三个字段类型是string,对齐值是8,大小为,所以他的内存偏移值必须是8的倍数,因为user1前两个字段就已经排到了第位,所以下一位的偏移量正好是,正好是字段C的对齐值的倍数,不用填充,可以直接排列第三个字段,也就是从第位到位第三个字段C.
第三个字段类型是bool,对齐值是1,大小为1,所以他的内存偏移值必须是1的倍数,因为user1前两个字段就已经排到了第位,所以下一位的偏移量正好是。正好是字段D的对齐值的倍数,不用填充,可以直接排列到第四个字段,也就是从到第位是第三个字段D.
好了现在第一条内存对齐规则后,内存长度已经为字节,我们开始使用内存的第2条规则进行对齐。根据第二条规则,默认对齐值是8,字段中最大类型程度是,取最小的那一个,所以求出结构体的对齐值是8,我们目前的内存长度是,不是8的倍数,所以需要补齐,所以最终的结果就是,补了7位。
说了这么多,画个图看一下吧:
现在你们应该懂了吧,按照这个思路再去分析其他两个struct吧,这里就不再分析了。
对于内存对齐这里还有一最后需要注意的知识点,空struct不占用任何存储空间,空 struct{ } 大小为 0,作为其他 struct 的字段时,一般不需要内存对齐。但是有一种情况除外:即当 struct{ } 作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段, 返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。来看一个例子:
func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptr3简单来说,对于任何占用0大小空间的类型,像struct { }或者[0]byte这些,如果该类型出现在结构体末尾,那么我们就假设它占用1个字节的大小。因此对于test1结构体,他看起来就是这样:`
func Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptr4因此在内存对齐时,最后结构体占用的字节就是8了。
重点要注意的问题:不要在结构体定义的最后添加零大小的类型
总结好啦,终于又到文章的末尾了,我们来简单的总结一下,unsafe 包绕过了 Go 的类型系统,达到直接操作内存的目的,使用它有一定的风险性。但是在某些场景下,使用 unsafe 包提供的函数会提升代码的效率,Go 源码中也是大量使用 unsafe 包。
unsafe 包定义了 Pointer 和三个函数:
type ArbitraryType inttype Pointer *ArbitraryTypefunc Sizeof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Alignof(x ArbitraryType) uintptruintptr 可以和 unsafe.Pointer 进行相互转换,uintptr 可以进行数学运算。这样,通过 uintptr 和 unsafe.Pointer 的结合就解决了 Go 指针不能进行数学运算的限制。通过 unsafe 相关函数,可以获取结构体私有成员的地址,进而对其做进一步的读写操作,突破 Go 的类型安全限制。
最后我们又学习了内存对齐的知识,这样设计可以减少CPU访问内存的次数,加大CPU访问内存的吞吐量,所以结构体中字段合理的排序可以更节省内存,注意:不要在结构体定义的最后添加零大小的类型。
原文:/post/好啦,这篇文章就到这里啦,素质三连(分享、点赞、在看)都是笔者持续创作更多优质内容的动力!
创建了一个Golang学习交流群,欢迎各位大佬们踊跃入群,我们一起学习交流。入群方式:加我vx拉你入群,或者公众号获取入群二维码
结尾给大家发一个小福利吧,最近我在看[微服务架构设计模式]这一本书,讲的很好,自己也收集了一本PDF,有需要的小伙可以到自行下载。获取方式:关注公众号:[Golang梦工厂],后台回复:[微服务],即可获取。
我翻译了一份GIN中文文档,会定期进行维护,有需要的小伙伴后台回复[gin
深入 Dify 源码,洞察 Dify RAG 核心机制
深入探究Dify源码,揭示RAG核心机制的关键环节 在对Dify的完整流程有了初步了解后,发现其RAG检索效果在实际部署中不尽如人意。因此,针对私有化部署的Dify,我结合前端配置和实现流程,详细解析了技术细节,旨在帮助调整知识库配置或进行定制化开发。Docker私有化部署技术方案
本文重点聚焦于Dify docker私有化部署的默认技术方案,特别是使用Dify和Xinference的GPU环境部署。若想了解更多,可查阅Dify与Xinference的集成部署教程。RAG核心流程详解
Extractor:负责原始文件内容的提取,主要在api/core/rag/extractor/extract_processor.py中实现。分为Dify默认解析和Unstructured解析,后者可能涉及付费,通常Dify解析更为常用。
Cleaner:清洗解析内容,减少后续处理负担,主要基于规则进行过滤,用户可在前端进行调整。
Splitter:文件分片策略,Dify提供自动和自定义两种,影响检索效果。
Retrieval:Dify支持多种检索模式,包括关键词检索和向量数据库检索,向量库的选择对效果有很大影响。
Rerank:对检索结果进行排序,配置Top K和score阈值,但存在设计上的不足。
总结与优化建议
Dify的RAG服务提供了基础框架,但性能优化空间大。通过调整配置,特别是针对特定业务场景,可以改善检索效果。对RAG效果要求高的用户,可能需要进行定制化的二次开发和优化。高手再高也不能找到多空资金线源码!
VAR0:=(2*CLOSE+HIGH+LOW)/4;
B:=XMA((VAR0-LLV(LOW,))/(HHV(HIGH,)-LLV(LOW,))*,);
主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE;
个股做空资金:EMA(主力做多资金,),COLORD9D,LINETHICK2;
5,POINTDOT,COLORWHITE;
,POINTDOT,COLORFFF0;
,POINTDOT,COLORGREEN;
,POINTDOT,COLORWHITE;
金手指代码是什么?
《口袋妖怪》:圣灰金手指代码大全如下:技能机器:
只要把所在位置上或全部改为,即可拥有每种技巧机个!
所在位置AA--A,一共个!
训练机序号 名称 获得场所 威力 PP
技巧训练机爆裂拳 在丹巴市(唐巴城)的道场主人那里得到。
技巧训练机头撞 在姥目森林(哈威森林)中获得,黄金市百货的5F也可以买到。
技巧训练机诅咒 由位于玉虫市的公寓中获得。 --
技巧训练机滚动 位于号道路的左侧。
技巧训练机吼叫 从在号道路的男子手上获得。 --
技巧训练机剧毒 由石竹市的道场主人杏子那里获得。 --
技巧训练机电磁炮 解决发电厂事件后,由所长那里得到。
技巧训练机岩碎 在第号道路获得,黄金市百货的5F也可以买到。
技巧训练机自我催眠 把No.从黄版传到金银版,把它身上的物品卸下, 便是了。 --
技巧训练机觉醒力量 在愤怒湖或是玉虫市的百货2F得到。 --
技巧训练机日本晴 黄金市广播塔解放后可以得到,也可以在玉虫市的百货得到。 -- 5
技巧训练机香甜气息 在姥目森林(哈威森林)北边的关卡,与右边的女人谈话。 --
技巧训练机鼾声 第号道路获得。
技巧训练机暴风雪 黄金市游戏中心枚交换。
技巧训练机破坏光线 玉虫市游戏中心枚交换。
技巧训练机冰结之风 从丁香镇(丁字镇)的道场主人手中得到。
技巧训练机守护 玉虫市百货的2楼元购买。--
技巧训练机祈雨 呆呆兽井的地下或在玉虫市百货2楼买到。-- 5
技巧训练机百万威力吸取 由玉虫市道场主人获得。
技巧训练机忍耐 烧毁的塔(宝塔)地下。 5
技巧训练机撒气 星期日在黄金市百货5楼获得。--
技巧训练机太阳光线 号道路下方。
技巧训练机钢之尾 由浅黄市道场主人得到。
技巧训练机龙之息吹 由熏烟市道场主人得到。
技巧训练机闪电 黄金市游戏中心枚交换。
技巧训练机地震 冠军道路。
技巧训练机报恩 星期日在黄金市百货5层获得。--
技巧训练机挖洞 在自然公园左下方。
技巧训练机精神干扰 玉虫市游戏中心得到或山吹市的超能力老人那里。
技巧训练机影子球 由槐树市道场主人得到。
技巧训练机扔泥 由桔梗市(归侨城)道场主人得到。
技巧训练机影分身 在玉虫市游戏中心枚交换。--
技巧训练机冷冻拳 黄金市百货5层元购买。
技巧训练机虚张声势 浅黄市(浅木市)灯塔5层中得到。--
技巧训练机梦话 黄金市百货地下二层。--
技巧训练机泥爆弹 号道路的关卡获得。
技巧训练机沙尘暴 号道路的民家或玉虫市百货2楼。--
技巧训练机大字火 黄金市游戏中心枚交换。
技巧训练机流星 连接道路的洞穴地下1层。
技巧训练机变圆 研钵山(巴奇山)中央入口进去后位于大瀑布洞穴中。--
技巧训练机闪电拳 黄金市百货5层元购买。
技巧训练机食梦 和睡在常磬市(时而镇)左侧的人交谈。
技巧训练机看穿 愤怒湖的左上方。-- 5
技巧训练机睡眠 冰之通道(冰天地)B2F。--
技巧训练机着迷 黄金市(黄金城)道场主人获得。--
技巧训练机盗窃 火箭队老巢的B2F。
技巧训练机钢之翼 号道路上的民家中。
技巧训练机火焰拳 黄金市百货5层元购买。
技巧训练机连续切 柏树镇道场主人得到。
技巧训练机恶梦 将号道路的警卫的信件送到号道路的胖子那里即可得到。--
秘传机器:
只要把秘传机所在位置改为即可!
所在位置AC--A,一共7个!(其实是个,只不过游戏程序不叫我们用那五个,招式太厉害了,破坏游戏平衡性!)
秘传机 序号 名称 获得场所 威力 PP
秘传训练机砍树 姥目森林(哈威森林)帮助寻找大葱鸭得到。
秘传训练机飞行 打败丹巴市(唐巴城)道场主人后与道场前的女子谈话。
秘传训练机冲浪 将槐树市五位使用不同伊贝的少女击败,与观众席上的男子交谈。
秘传训练机怪力 浅黄市(浅木市)民家获得。
秘传训练机闪光 花苞之塔(马丹蕾塔)长老处获得。--
秘传训练机漩涡 摧毁火箭队老巢后,小渡会给你。
秘传训练机攀瀑 冰之通道(冰天地)1层。
精灵球以及取得方法:
名字 颜色 功能 取得地点
精灵球 红 捕获率% 商店/道路
超级球 蓝 捕获率% 商店/道路/洞窟/不可思议的礼物
高级球 金黄 捕获率% 商店/道路/洞窟
大师球 绿 捕获率% 打完8个道馆,找空木博士拿/中头奖
A0 诱饵球 蓝 容易抓钓竿钓到的,把青色种子给工匠。
9F 等级球 浅咖啡 容易抓等级比自己高的,把红色种子给工匠。
A5 月亮球 灰 容易抓用月亮之石进化的,把色种子给工匠。
A4 友谊球 浅咖啡 抓到的怪兽容易亲近,把绿色种子给工匠。
9D 重量球 灰 容易抓比自己重量重的,把黑色种子给工匠。
A6 异性球 橙 容易抓姓别跟自己不同的,把桃色种子给工匠。
A1 速度球 蓝 容易抓速度快的,把白色种子给工匠。
B1 昆虫球 灰 抓虫大会用的,抓虫大会时会给你。
种子和具体位置:
名字 用途 取得地点
白色种子 可作为速度球的材料 哈威城的树。
红色种子 可作为等级球的材料 号道路的树。
青色种子 可作为诱饵球的材料 号道路的树。
黑色种子 可作为重量球的材料 号道路的树。
桃色种子 可作为异性球的材料 号道路的树。
5D 绿色种子 可作为友谊球的材料 号道路的树。
5C **种子 可作为月亮球的材料 号道路的树。
进化道具及位置:
物品名称 进化的pokemon 取得地点
8F 金属外套:飞天螳螂/大岩蛇(通信交换)
1.亚速亚号事件结束后
2.野生的小磁怪身上可能带有
龙之鳞片:海刺龙(通信交换)
1.研钵山2层
2.野生的墨海马/海刺龙/迷你龙身上可能带有
AC 升级卡:3D龙(通信交换)
山吹市
王者之印:呆呆兽/蚊香蝌蚪(通信交换)
1.呆呆兽之井(洞穴深处的那个人给的)
2.野生的呆呆兽/呆河马/蚊香蛙可能带有
火之石:六尾/卡蒂狗/伊布
拿六尾给正辉的爷爷看
水之石:蚊香蛙/大舌贝/海星星/伊布
拿海星星给正辉的爷爷看
雷之石:皮卡丘/伊布
拿皮丘给正辉的爷爷看
草之石:臭臭花/口呆花/蛋蛋
拿行路草给正辉的爷爷看
月亮之石:皮皮/胖丁/尼多力诺/尼多娜
1.妈妈会买给你
2.塔上瀑布
3.星期一晚月见山里的皮皮仪式
A9 太阳石:臭臭花/太阳种子
捉虫大赛第一名
其他道具:
道具前面是它的源代码,比如 就是有一个(就是)精灵球(就是),从A以后就是道具位置,注意,不要修改得超出道具栏了!
代码—正式名称—用途—中文版翻译名称
光粉 降低对手命中率. (装备) 海子球
自行车 旅行速度X2. 单车
月石 进化一些Pokemon 月石
中毒剂 治愈中毒的Pokemon 解毒
0A 烧伤剂 治愈烧伤的Pokemon 治烧伤
0B 冰冻剂 治愈冰冻的Pokemon 解冻
0C 催醒剂 把睡着的Pokemon叫醒 唤醒
0D 麻痹剂 治愈麻痹的Pokemon 解痹
0E 恢复药 恢复所有HP并治愈异常状态 恢复药
0F 最大补血剂 补满Pokemon的HP 金丹
超级补血剂 回复Pokemon的HP. 银丹
高级补血剂 回复的Pokemon的HP 红丹
补血剂 回复的Pokemon的HP 白丹
逃跑绳 在山洞中逃跑用 大年
除虫剂 走步不会遇到Pokemon 皮皮
完全PP回复 回复一个Pokemon的所有PP 表皮
火石 进化一些Pokemon 火焰石
雷石 进化一些Pokemon 雷之石
水石 进化一些Pokemon 水石
1A HP提升 提升一个Pokemon的HP 比秋
1B 蛋白质 提高Pokemon的攻击 牛磺
1C 铁 提高Pokemon的防守 挨汛
1D 碳水化合物 提高Pokemon的速度 沙波
1E 幸运拳套 提高幸运蛋命中要害的机率 其
1F 钙 提高Pokemon的特攻特防 卡思
神奇涛淦鼷 提高Pokemon一级 玛胡
X命中率 战斗中提高命中率 X爱
草石 进化一些Pokemon
金属粉 提高百变怪的防守(装备) 本参
金矿 纯金卖好价钱。 金块
皮皮娃娃 从野生Pokemon逃走 精灵垛
全治愈 治愈所有异常情况 福愈
复活 复活一个Pokemon并回复1/2 HP. 雷胡
精神草 完全复活一个Pokemon
守卫符 防止技能指数受敌人影响 沙事
2A 超级除虫剂 步不遇到Pokemon 拓者
2B 最大除虫剂 步不遇到Pokemon 大皮皮
2C 命中装置 战斗中提高命中要害机率 第雷
2E 新鲜水 回复HP 橙汁
2F 苏打水 回复HP 汁子
柠檬汁 回复HP 椰汁
X攻击 战斗中提高攻击 X击
X防守 战斗中提高防守 X防
X速度 战斗中提高速度 X速
X特殊 战斗中提高特攻特防 X力
硬币盒 可装枚硬币 吉姆
探测器 寻找看不见的物品
EXP分享器 分享经验值(装备) 学习装置
3A 旧钓竿 钓水系Pokemon用 竹杆钩
3B 好钓竿 较好的抓水系Pokemon用的钓竿 木杆钩
3C 银色羽毛 奇怪的银色羽毛 银叶子
3D 超级钓竿 最好钓水系Pokemon用的钓竿 铜杆钩
3E 提高PP 提高一个招式的最大PP
3F 回复PP2 回复一个招式的个PP
完全回复PP2 完全回复一个招式的所有PP 井尖
回复PP3 回复所有招式个PP 尖在
红色鳞片 红色暴鲤龙掉下的鳞片
全能药 治疗好任何Pokemon(剧情道具)
船票 乘船用 船票
神秘的蛋 从精灵爷爷那儿得到的蛋
透明铃铛 捕捉凤凰必带道具 比秋
银翅膀 发亮的银色翅膀 热牛奶
牛奶 回复HP 雪瓜汁
先制之爪 提高速度(装备) 灼灼灼
4A 防毒果实 治愈中毒(装备) 解毒果
4D 金色树叶 奇怪的金色树叶 金叶
4C 软沙子 提高地面系绝招威力(装备) 柔沙
4D 尖利的鸟嘴 提高飞行系绝招威力(装备) 尖啄
4E 防麻果实 治愈麻痹(装备) 解痹
4F 烧过的果实 治愈冰冻(装备) 烧果
冰过的果实 治愈烧伤(装备) 冰果
毒针 提高毒系绝招威力(装备) 仿毒
王者之印 可能惊吓对手(装备) 王印
苦果实 治愈混乱(装备) 苦果
清醒果实 治愈被催眠(装备) 薄果
红栗子 红栗子
小蘑菇 卖不了高价钱
大蘑菇 卖高价
银粉 提高虫系绝招威力(装备) 银粉
蓝栗子 蓝栗子
5B 钱戒指 双倍获得金钱(装备)
5C 黄栗子 黄栗子
5D 绿栗子 绿栗子
5E 避敌丸 装备后就难和Pokemon相遇了 凡票
5F 神秘的水滴 提高水系绝招威力(装备) 神滴
勺子 提高超能系绝招威力(装备) 白栗
白栗子 白栗子
黑腰带 提高格斗系绝招威力(装备) 黑栗
黑栗子 黑栗子
粉红栗子 粉红栗子
墨镜 提高邪恶系绝招威力(装备) 美尾
呆呆兽的尾巴 卖高价 粉带
粉红缎带 提高常规系绝招威力(装备) 长葱
短棍 卖低价 烟弹
6A 烟雾球 从野生Pokemon逃走(装备) 寒冰
6B 千年寒冰 提高冰系绝招威力(装备) 磁石
6C 磁铁 提高电系绝招威力(装备) 奇果
6D 奇迹果 治愈所有异常情况(装备) 小珠
6E 珍珠 卖低价
6F 大珍珠 卖高价
不变石 停止进化(装备) 身符
幽灵标签 提高鬼系绝招威力(装备) 护身符
愤怒湖馒头 回复HP 芝世
济符球 让人不可思议(游戏上是这么显示的) 世革
蓝色的卡 参加电台抽奖用的
奇异种子 提高草系绝招威力(装备) 攻芭
骨头 一种骨头,卖低价 芭凶
毅力缎带 可能防止死(装备) 凶区
能量粉 回复HP
7A 能量根 回复HP
7B 治愈粉 治愈所有异常情况
7C 复活药 复活Pokemon
7D 硬石头 提高岩石系绝招威力(装备) 炙弱
7E 幸运蛋 领取额外的经验值(装备)
7F 卡片钥匙 广播塔百叶窗的钥匙
机器零件 发电场被偷的零件
贸易券 好象是贸易中心用的
掉了的物品 金黄市模仿女孩掉了的娃娃
星尘 红色,卖高价。
星星碎片 卖非常高的价
地下室钥匙 打开门 他砂
车票 乘火车用。 砂仙
8A 木炭 提高火系绝招威力(装备) 贡字
8B 果汁 回复HP.
8C 瞄准镜 提高命中要害机率(装备)
8F 金属外套 提高钢铁类型绝招威力(装备) 顺晨
龙牙 提高龙系绝招威力(装备) 晨或
剩饭 在战斗中回复HP(装备)
神秘果实 回复PP
龙的鳞片 一种珍贵的龙类物品
超梦的遗传因子 提高攻击但会混乱
9C 圣灰 复活所有Pokemon
9E 鲜花邮件 印有鲜花(装备) 晨虎球
A3 心之水滴 提高特攻的奇怪球体(装备) 顺迪
A7 常规箱子 打开看看里面有啥
A8 神秘魔盒 打开看看里面有啥
A9 太阳石 进化一些Pokemon
AA 粉红缎带 提高常规系绝招的威力(装备) 汪及
AC 升级盒 Silph Co.制造的神秘箱子 闪轴
AD 树木果实 一种补血物品(HP,装备)
AE 黄金果实 一种补血物品(HP,装备)
AF 杰尼龟水壶 用来浇树用
B2 彩虹羽毛 彩虹颜色的神秘羽毛 外量
B4 砖型碎片 一种珍贵的碎片 少友
B5 冲浪邮件 邮件上印有乘龙(装备) 友泊
B6 淡蓝色邮件 上面印有迷你龙(装备) 泊宵
B7 肖像邮件 上面印有携带信件精灵 宵欠
B8 可爱邮件 印有心(装备) 欠左
B9 永世邮件 印有伊布(装备) 左电
BA 变形邮件 印有百变怪(装备) 电恨
BB 蓝天邮件 印有蓝天(装备)
BC 音乐邮件 印有超能鸟(装备) 于慢
BD 雾气信件 全则
委比指标公式源码
集合竞价量比
量比:=V/REF(MA(V;
D1:=ISBUYORDER AND DYNAINFO(9)*C/>
=;{ 分笔买入单>
万}
ST:=NOT(NAMELIKE('S') OR NAMELIKE('*S'));
T1:=DYNAINFO()/DYNAINFO(4)>
=1. AND DYNAINFO()/DYNAINFO(4)