PandasWS / Pandas

熊猫模拟器 - 基于 rAthena 构建的中文仙境传说模拟器(欢迎加入QQ交流群:928171346)
https://pandas.ws
GNU General Public License v3.0
8 stars 2 forks source link

[Expand] strnpcinfo 支持指定Npc Id #580

Open ShiraGawaAnri opened 2 years ago

ShiraGawaAnri commented 2 years ago

功能建议或构想

*strnpcinfo(,{})

在原来的基础上支持GID获取指定NPC的String信息 常用于copynpc返回npcid,快捷donpcevent(由于donpcevent并不支持Id的缘故)

想实现它的原因

copynpc在副本里表现并不友好

参考信息

No response

jian916 commented 2 years ago

*getunitname ; 可以達到你要的需求?

ShiraGawaAnri commented 2 years ago

*getunitname ; 可以達到你要的需求?

getunitname并不如strnpcinfo详细方便 尤其在副本里copynpc的场合,没法取得#hidden ::unique 前者结合displayname用于instance_npcname,后者可以 donpcevent strnpcinfo(3,.@GID)+"::"+"EventLabel"; (仅限副本内 copynpc返回的npc) 其他场合没并有特别需求

jian916 commented 2 years ago

取得 #hidden name = sscanf(getunitname(.@gid), "%[^#]#%s", .@visible$, .@hidden$); 或是 explode(.@name$, getunitname(.@gid), "#"); .@visible$=.@name$[0]; .@hidden$=.@name$[1];

取得 ::unique name 在副本裡 ::unique 等於 instance_npcname("visible#hidden") 副本裡取得 ::unique name = instance_npcname(getunitname(.@gid))

回到問題原始點, 既然 copynpc 是可以預期的名稱, 為什麼要轉成 .@gid, 用字串保存不是更簡單?

ShiraGawaAnri commented 2 years ago

取得 #hidden name = sscanf(getunitname(.@gid), "%[^#]#%s", .@visible$, .@hidden$); 或是 explode(.@name$, getunitname(.@gid), "#"); .@visible$=.@name$[0]; .@hidden$=.@name$[1];

取得 ::unique name 在副本裡 ::unique 等於 instance_npcname("visible#hidden") 副本裡取得 ::unique name = instance_npcname(getunitname(.@gid))

回到問題原始點, 既然 copynpc 是可以預期的名稱, 為什麼要轉成 .@gid, 用字串保存不是更簡單?

这情况下取得#hidden name过于复杂了 为什么要用#hidden呢,可能是个人习惯的问题 由于RA(Auriga实现了)没有实现副本内Npc自拥变量,并且copynpc的.变量会被共享,即使是被copy的npc也希望功能也有所区别的情况下, 会在#hidden末尾处加入数字作标识 当然以上explode可以封装来代替,但没必要那么麻烦

接着是instance_npcname对于copynpc后的用法

.@gid = copynpc(xx);
.@label$ = strnpcinfo(0,.@gid)+"::"+"OnMobDead";
.@mid = monster(.@map$,.@x,.@y,"--ja--",1002,1,.@label$);

其实是无须instance_npcname,copynpc后就是独立个体了,因此在副本里也不需要instance_npcname 注:这个时候不是100%确定 #hidden 部分是否被占用了,这个和被copynpc的源是否写在副本内有关系。

回答最后一点,copynpc返回的是gid,getunitname也是用gid,无论怎么样我肯定是先保存一份gid,再图谋其他不是吗?