找回密码
 点一下
查看: 1614|回复: 16

Galaxy有没类似TRY的语法。

[复制链接]
发表于 2011-7-23 16:11:26 | 显示全部楼层 |阅读模式
刚学SE2编辑,目前遇到一个变量转换的问题,比如我要为一个字符串STR赋值,但有两种可能一种是赋值是正常字符串这个没问题,另一个可能是会得到空值类似NULL的值(我不知道Galaxy是怎么表达NULL值的),这个时候我需要把这个NULL值转化为字符串的""这样的空值,不知道有没办法。或者有没通用的自定义转换函数可以处理得呢。求各位高手协助啊
发表于 2011-7-23 17:15:44 | 显示全部楼层
在galaxy里, (""==null) 为真.
在字符串处理上,值为null的字符串与""的字符串完全一样,都可以使用赋值,+操作符,等等。。
回复

使用道具 举报

发表于 2011-7-23 20:49:55 | 显示全部楼层
感觉就像是galaxy里字符串NULL就是一个值为""的字符串常量啊……
回复

使用道具 举报

发表于 2011-7-23 23:18:44 | 显示全部楼层
在Galaxy里null和""是不同的值。只是当时用==来比较时返回真而已。
回复

使用道具 举报

发表于 2011-7-24 00:03:47 | 显示全部楼层
至于你的问题~~只要在赋值以后试一下 str=="" ~~然后只要是true就设为""即可~~

这样不管它原本是null还是"",结果都会变成""了~~
回复

使用道具 举报

 楼主| 发表于 2011-7-24 00:29:30 | 显示全部楼层
大大来了,再讲详细点目前的状况是这样的偶用了一个神级的函数,CatalogFieldValueGet(),这个函数返回的字符串,但问题在于当这个函数读取到NULL值的时候会在调试器报错。所以我就想先搞个显式转换以免它报错。
回复

使用道具 举报

发表于 2011-7-24 00:53:42 | 显示全部楼层
这个的话,还不如从一开始就防止这种情况发生来的好。而不是考虑事后补救。Catalog有许多函数可以事先判断entry和数组元素是否存在。
回复

使用道具 举报

 楼主| 发表于 2011-7-24 12:34:45 | 显示全部楼层
引用第6楼麦德三世于2011-07-24 00:53发表的  :
这个的话,还不如从一开始就防止这种情况发生来的好。而不是考虑事后补救。Catalog有许多函数可以事先判断entry和数组元素是否存在。


能不能举例说明一下Catalog有许多函数可以事先判断entry和数组元素是否存在。像我这种情况怎么处理?
回复

使用道具 举报

发表于 2011-7-24 16:13:43 | 显示全部楼层
你没说具体。你那个具体是怎么种情况呢?
回复

使用道具 举报

 楼主| 发表于 2011-7-25 09:54:48 | 显示全部楼层
引用第8楼麦德三世于2011-07-24 16:13发表的  :
你没说具体。你那个具体是怎么种情况呢?

目前的状况是这样的,我用CatalogFieldValueGet()函数取数一个物品类型的数据,有设置物品类型情况下是没问题的,但有些的单位的类型在简体编辑器里面显示的是“<无>”,这个时候就会有错误提示。提示是一串由英文和数字组成的代码,估计是16进制字符串。另外我发现CatalogFieldValueGet如果抽取文本数据中包含中文也会有类似问题。所以问题很可能是TextToString的问题。由于SE2没有TextToString函数,这个转换是有问题的。大大看看有没办法解决。

PS:写到这里,另外有一个邪恶的想法。如果错误的代码真的是16进制字符串。是否可以捕捉错误的文本,这不就相当于实现了TextToString的函数了吗。现在上班不能测试,回去再试试。

大大帮看看有没有解决的方法,以及现在有没有什么好的方法解决TextToString的问题。
回复

使用道具 举报

发表于 2011-7-25 12:14:55 | 显示全部楼层
单位类型怎么会是无呢?

你怎么写的?贴下看
回复

使用道具 举报

 楼主| 发表于 2011-7-25 12:38:34 | 显示全部楼层
引用第10楼麦德三世于2011-07-25 12:14发表的&#160;&#160;:
单位类型怎么会是无呢?

你怎么写的?贴下看

额,在公司开不了编辑器,但我说的不是单位类型,是物品类型。现在物品类型是自定义的,这个是可以自己定义的比如“刀” “剑” "甲"“”药水“ 等等乱七八糟的,这个物品类别SE2里面默认是无的。
回复

使用道具 举报

发表于 2011-7-25 13:14:31 | 显示全部楼层
native bool CatalogEntryIsValid (int catalog, string entry);

用这个来验证模板是否存在。
回复

使用道具 举报

 楼主| 发表于 2011-7-25 13:34:20 | 显示全部楼层
引用第12楼麦德三世于2011-07-25 13:14发表的  :
native bool CatalogEntryIsValid (int catalog, string entry);

用这个来验证模板是否存在。

原来有这样的函数,感觉离问题差不多解决了,未测试这个函数,不过光看这个函数感觉检验的实体层级还不对。
因为函数native string CatalogFieldValueGet(int catalog,  string templateId,  string prop,  int player);取到的数据是取到物品里面的某个属性的就是取到string prop这个位置,而CatalogEntryIsValid (int catalog, string entry);只有两个参数只取到到物品这个实体而应该未取到里面的属性。是否还有一个类似CatalogEntryPropIsValid (int catalog, string entry,string prop);这样的函数存在呢。
回复

使用道具 举报

发表于 2011-7-25 13:36:57 | 显示全部楼层
嗯?你不是要验证物品指定分类是否实际存在。

而是想要验证物品有没有分类么?
回复

使用道具 举报

 楼主| 发表于 2011-7-25 14:20:06 | 显示全部楼层
引用第14楼麦德三世于2011-07-25 13:36发表的&#160;&#160;:
嗯?你不是要验证物品指定分类是否实际存在。

而是想要验证物品有没有分类么?

是的,像我上面所说的那样物品类型是自定义的,这个是可以自己定义的比如“刀” “剑” "甲"“”药水“这样的,我要抽取物品里面的类型属性,比如我要看看这个物品是不是”刀“,那我就用CatalogFieldValueGet(物品的catalog,&#160;&#160;物品ID,&#160;&#160;"刀",&#160;&#160;0) 这个是只是中文的举例实际参数都是一串长的英文我已经忘记了,反正这样可以取到"刀"这个物品类型属性出来,然后判断为真的时候再做下面的处理,这个已经OK没问题的了,但目前有许多物品类别一般在编辑器默认值都是<无>,这个可能在数据里是记录为NULL值,而当我用这个函数获取到不是”刀“而是<无>的时候就会报错了。
回复

使用道具 举报

发表于 2011-7-25 15:11:09 | 显示全部楼层
CatalogFieldValueGet()并不会因为取到null而报错。

只会在这个field不存在或者entry不存在的情况下报错。

CatalogFieldValueGet(c_gameCatalogItem, "ItemGrenades", "Class", 0)

这样是不会出错的。

所以你要么是完全写错路径了,要么就是把返回值拿去做了什么才会导致报错。

比如你有没有把返回值拿到ItemClass这个Catalog里面查这个分类的Name之类的。如果要这样做的话就得先用CatalogEntryIsValid来验证分类是否存在。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-8-8 03:21 , Processed in 0.074720 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表