骑马与砍杀前缀怎么修改前缀加的属性

你的位置:
装备附加奖励批量设置方法(含单slot多信息存储,slot、string批量设置相关方法)
[i=s] 本帖最后由 aliang227 于
18:18 编辑 QUOTE:
本文1楼为 装备附加奖励批量设置各类方法介绍,以及本人所写代码的详细注解
& && &2楼为 装备附加奖励批量设置完整代码
& && &3楼为 扩展部分,如套装的实现关于装备的附加奖励,比如四围、技能、熟练度等奖励,很多MOD中都已经实现过,首先总结一下我所知道的一些实现方法:
1,利用mod system自带的script:#script_game_get_skill_modifier_for_troop
它的注释是:# This script is called from the game engine when a skill's modifiers are needed,也就是受game engine 所调用的,而使用起来也是最方便的一种,以其中一例说明:
[spoiler=方法1——例1]QUOTE:……………………
& & (else_try),
& && &(eq, &:skill_no&, &skl_surgery&), #当&:skill_no&为疗伤技能时
& && &(call_script, &script_get_troop_item_amount&, &:troop_no&, &itm_book_surgery_reference&), #利用script获取兵种物品栏疗伤书的总量,存于reg0中输出
& && &(gt, reg0, 0), #该物品多于0
& && &(val_add, &:modifier_value&, 1), #&:modifier_value&加一,也就是输出后疗伤技能+1
……………………[/spoiler]
因此,要获得装备奖励,我们可以类比写下:
[spoiler=方法1——例2]QUOTE:……………………
& & (else_try),
& && && & (eq, &:skill_no&, &skl_engineer&), #当&:skill_no&为工程技能时
& && && & (troop_has_item_equipped,&:troop_no&,&itm_practice_sword&), #玩家装备练习剑时
& && && & (val_add, &:modifier_value&, 2), #工程技能+2
……………………[/spoiler]
这种附加适用于所有troop,而且加成后技能颜色是绿色的,同时使用及定义时也特别方便,不过很遗憾,系统自带的这个script只有这一种,也就是,只能附加技能,如果装备需要另附加四围或者熟练度,需要另写代码,因此这类方法用途有限。
2,利用全局变量与触发器的搭配,检测装备奖励
可以参照 魔方 的此贴:如何编辑PY代码实现特殊装备或套装附加奖励(就像TLD里的那样) (),
以及 oo 的此贴:让战友们也享受装备奖励的快感^^ (),
主要思想帖子里都说的很详细了,我简单的介绍一下,以oo的帖子为例,是运用三个触发器:
& &触发器1,检测玩家部队是否有人装备特殊装备
& &触发器2,检测已装备特殊装备的兵种,并赋予奖励,存储被奖励者ID
& &触发器3,检测卸下特殊装备,或装备者更换时,扣除卸下者奖励,增加装备者奖励
代码写的很精彩,同时效用明显,但是使用时也有一定局限性:首先是单个装备的全局变量运用较多,且当需要奖励的装备数量过多时,批量定义会变得不方便;然后是,仅限于独一无二的装备,如果某种装备有多个时,检测将会不准确,只使其中之一生效。
因此此类方法更适合于极品装备不多且唯一的情况。
3,利用装备前缀增加附加属性
此类方法是由oo原创,也就是泡菜及自由王国中的晶石打造系统,将一些不常用或废弃的前缀利用,加以附上特性,达到奖励的效果,这里就不多谈了。
这种方法适合于批量装备的定义,以及无troop和item限制的奖励。不过不是太适用于某独特装备的附加属性设置。
===================================================
以上三种方法即为我所知对装备进行附加奖励的方法,各有各的特点。不过本人在水浒的制作中想实现装备奖励,但遇到阻碍,因为首先极品装备比较多,其次极品装备不唯一,再次装备奖励需要包含四围、技能和熟练度等方面,还有需要对每个所装备的兵种都生效,因此以上几种方法都不能满足我理想中的要求。所以本人经过长时间思考,写了一段符合自己要求的代码,这里给大家介绍一下,与此同时,也介绍一些单slot多信息存储,slot、string批量设置的思想与相关方法,希望能对各位MODDER有所帮助。
首先介绍一下这段代码的基本思想,所有装备奖励的主体思想都是类似:
检测未装备,未奖励时,无动作——检测已装备,但未奖励时,给予奖励——检测已装备,已奖励时,无动作——检测未装备,已奖励时,扣除奖励
以前的奖励方法多用troop_has_item_equipped来检测,但是对于多种相同物品的装备检测很不方便,比如装备两把相同的极品枪,则需要用另外方法判定,同时,对于检测“变化”,也就是从无到有,从有到无,也不是很方便。而本人无意间在head_items.py里看到这段:
[spoiler=equipment slots]QUOTE: #equipment slots
ek_item_0 = 0
ek_item_1 = 1
ek_item_2 = 2
ek_item_3 = 3
ek_head& &= 4
ek_body& &= 5
ek_foot& &= 6
ek_gloves = 7
ek_horse&&= 8
ek_food& &= 9[/spoiler]也就是说,利用troop_get_inventory_slot获取物品栏slot时,前9个分别对应了玩家现在的装备
因此,我同时给troop定义了类似slot
[spoiler=troop_ek_slots]QUOTE: #the following 9 slot store troop equip last
slot_troop_ek_item_0 = 150
slot_troop_ek_item_1 = 151
slot_troop_ek_item_2 = 152
slot_troop_ek_item_3 = 153
slot_troop_ek_head = 154
slot_troop_ek_body = 155
slot_troop_ek_foot = 156
slot_troop_ek_gloves = 157
slot_troop_ek_horse = 158[/spoiler]两者是分别对应的,一个是获取现在的装备,一个是将troop曾经的装备存储,当装备改变时,再检测改变的装备是否是特殊装备,如果是,则执行属性加成或减少。
而装备奖励繁多且乱的时候,收集起来批量设置也会方便很多,因此我也对item定义了如下slot:
[spoiler=special_slots]QUOTE:slot_item_special = 6 #1=special
slot_item_add_attribute = 7 # last num shows attribute id/other shows value
slot_item_add_skill = 8 # last two num shows skill id/other shows value
slot_item_add_proficiency = 9 #last num shows proficiency id/other shows value[/spoiler]
这里介绍一下单slot多信息存储的方法,大家知道,slot一般用法是=0时为某条件,&0时为某条件;抑或为所有者存储某种数值,比如troop的各不相同的声望。但是,过多的slot对占有量会比较大,因此可以利用方法,在不影响可读性的条件下,给单slot定义某类相关的多信息,以 slot_item_add_attribute 为例:
在影响附加奖励时,四围奖励有两个信息:一个是属性id,也就是力量、敏捷、智力、魅力,分别对应ID为0,1,2,3;另一个是奖励的数值。而当我们存储时,可以将这两个信息同存在一个slot里,attribute的ID为0-3,一位数,奖励的数值是一位数以上,所以我们可以将奖励数值乘以10,再加上ID。QUOTE:比如,我们需要给某种物品增加敏捷3点,也就是attribute的ID为1,奖励值为3,3×10=30,存于slot中就是31,如:
(item_set_slot,&:item_id&,slot_item_add_attribute,31),
而我们如何分别获取信息呢?可以分别利用store_mod取余数和store_div取除数,如:
(item_get_slot,&:attribute&,&:item_id&,slot_item_add_attribute),
(store_mod,&:id&,&:attribute&,10),& &则id=1,即刚才存储的敏捷ID
(store_div,&:value&,&:attribute&,10),&&则value=3,即刚才存储的奖励值3&&[注:mod system里变量只存整数,小数部分是会自动舍去的]
这样就可以完成单个slot的多信息量存入与读取,上面的10就相当于位数分割,说明个位是一类值,十位以上是一类值。
再比如slot_item_add_skill,skill的ID是从0到41,所以我们需要把个位和十位存放ID,百位以上存放增量,再以
(store_mod,&:id&,&:skill&,100),& &
(store_div,&:value&,&:skill&,100),
来获取,这里就要用100来进行分割获取了这就是单个slot多信息量的存储方法,如果你愿意,单个slot可以存储3个或更多信息,不过我这里不大确定能存储的最大位数为多少。同时这种方法也适用于单个全局变量存储多个数值信息。但需要注意的是,最好确定低位变量的数值位数是固定的,这样才会方便进行分割位获取。
以上即为slot的定义,准备工作完毕,下面就在triggers.py里添加触发器了:
[spoiler=完整触发器详解]QUOTE: #troop equip special item
& &(0.5, 0, 0, #检测时间为游戏中0.5小时
& && &&&(try_for_range,&:troop_id&,&trp_player&,&trp_all_troops_end&),&&#对所有troop循环,trp_all_troops_end为我自己在所有troop后所加的
& && && && & (try_for_range,&:num&,0,9), #循环9次,原因见下
& && && && && && &(store_add,&:now_inventory_slot&,ek_item_0,&:num&),
& && && && && && &(store_add,&:old_inventory_slot&,slot_troop_ek_item_0,&:num&), #这是slot的批量循环方法,由于ek_item_0和slot_troop_ek_item_0是对应的,且与后面相关slot都相连,因此可首先同时获取,然后同时加一,即分别变为ek_item_1和slot_troop_ek_item_1,依次类推,就可以同时获取相同troop,相同装备槽里的以前与现在的装备了。
& && && && && && &(troop_get_inventory_slot,&:now_item_id&,&:troop_id&,&:now_inventory_slot&), #获取槽内现在的物品ID
& && && && && && &(troop_get_slot,&:old_item_id&,&:troop_id&,&:old_inventory_slot&), #获取存于该troop信息中之前的物品ID
& && && && && && &(neq,&:now_item_id&,&:old_item_id&), #如果两者ID不同,也就是装备有改变时
& && && && &(try_begin), #以下判断如果troop曾经装备有特殊物品,但现在此槽没有此装备的情况
& && && && && && && &&&(gt,&:old_item_id&,0), #注意,当槽内无装备,获取的ID则为-1,以此来获得slot的话,会出红字报错,所以需要有大于0的限制
& && && && && && && &&&(item_slot_eq,&:old_item_id&,slot_item_special,1), #卸下的物品是特殊物品
& && && && && && && &&&(item_get_slot,&:attribute&,&:old_item_id&,slot_item_add_attribute), #获取该物品的四围属性改变量
& && && && && && && &&&(store_mod,&:attribute_id&,&:attribute&,10), #取余取得四围属性ID
& && && && && && && &&&(store_div,&:attribute_value&,&:attribute&,10), #取除数取得改变值
& && && && && && && &&&(item_get_slot,&:skill&,&:old_item_id&,slot_item_add_skill), #获取该物品的技能属性改变量
& && && && && && && &&&(store_mod,&:skill_id&,&:skill&,100), #取得技能ID
& && && && && && && &&&(store_div,&:skill_value&,&:skill&,100), #取得技能该变值
& && && && && && && &&&(item_get_slot,&:proficiency&,&:old_item_id&,slot_item_add_proficiency), #获取该物品熟练度改变量
& && && && && && && &&&(store_mod,&:proficiency_id&,&:proficiency&,10), #取得熟练度ID
& && && && && && && &&&(store_div,&:proficiency_value&,&:proficiency&,10), #取得熟练度改变值
& && && && && && && &&&(store_sub,&:attribute_value_sub&,0,&:attribute_value&), #由于卸下装备,则须将该变量设为负值,便于计算
& && && && && && && &&&(store_sub,&:skill_value_sub&,0,&:skill_value&),
& && && && && && && &&&(store_sub,&:proficiency_value_sub&,0,&:proficiency_value&),
& && && && && && && &&&(troop_raise_attribute,&:troop_id&,&:attribute_id&,&:attribute_value_sub&), #分别减去四围、技能、熟练度
& && && && && && && &&&(troop_raise_skill,&:troop_id&,&:skill_id&,&:skill_value_sub&),
& && && && && && && &&&(troop_raise_proficiency,&:troop_id&,&:proficiency_id&,&:proficiency_value_sub&),
& && && && && && && &&&(try_begin), #以下判断奖励者如果在部队中,则输出奖励信息
& && && && && && && && && & (main_party_has_troop,&:troop_id&), #troop在玩家队伍中
& && && && && && && && && & (str_store_troop_name,s9,&:troop_id&), #存储玩家姓名
& && && && && && && && && & (str_store_item_name,s10,&:old_item_id&), #存储物品名
& && && && && && && && && & (display_message,&@{s9} have not equipped the {s10}.&,0xFF9600), #显示某兵种卸下了某物品
& && && && && && && && && & (try_begin), #以下判断各项奖励值显示
& && && && && && && && && && && &(neq,&:attribute_value&,0), #如果有四围属性奖励
& && && && && && && && && && && &(store_add,&:attribute_name&,&:attribute_id&,&str_ca_strength&), #类似slot批量循环,string也可以批量循环,首先将需要的string依序定义,当id增加时,string也同时增加,达到批量定义的效果。如attribute_id=1,也就是敏捷,str_ca_strength 的ID=1000 如果将str_ca_agility紧接于str_ca_strength定义,则+1后id为1001,正好等于str_ca_agility的ID,与attribute_id相符。
& && && && && && && && && && && &(str_store_string,11,&:attribute_name&), #将获取的字符串存在s11中
& && && && && && && && && && && &(assign,reg11,&:attribute_value&), #将该变量存在reg11中
& && && && && && && && && && && &(display_message,&@{s9}'s {s11} down {reg11}&), #显示 某兵种的某属性下降了多少
& && && && && && && && && & (try_end), #循环结束
& && && && && && && && && & (try_begin), #同理对技能循环并显示
& && && && && && && && && && && &(neq,&:skill_value&,0),
& && && && && && && && && && && &(store_add,&:skill_name&,&:skill_id&,&str_skl_0_trade&),
& && && && && && && && && && && &(str_store_string,12,&:skill_name&),
& && && && && && && && && && && &(assign,reg12,&:skill_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s12} down {reg12}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin), #同理对熟练度循环并显示
& && && && && && && && && && && &(neq,&:proficiency_value&,0),
& && && && && && && && && && && &(store_add,&:proficiency_name&,&:proficiency_id&,&str_wpt_one_handed_weapon&),
& && && && && && && && && && && &(str_store_string,13,&:proficiency_name&),
& && && && && && && && && && && &(assign,reg13,&:proficiency_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s13} down {reg13}&),
& && && && && && && && && & (try_end),
& && && && && && && &&&(try_end), #显示输出判断结束
& && && && && && &(try_end), #卸下物品影响判断结束
& && && && &(try_begin), #以下判断如果troop现在新装备的物品是特殊物品,则给予附加奖励。大体上与卸下装备的判断类似,不过注意奖励为正值而不是卸下的负值
& && && && && && && &&&(gt,&:now_item_id&,0),
& && && && && && && &&&(item_slot_eq,&:now_item_id&,slot_item_special,1),
& && && && && && && &&&(item_get_slot,&:attribute&,&:now_item_id&,slot_item_add_attribute),
& && && && && && && &&&(store_mod,&:attribute_id&,&:attribute&,10),
& && && && && && && &&&(store_div,&:attribute_value&,&:attribute&,10),
& && && && && && && &&&(item_get_slot,&:skill&,&:now_item_id&,slot_item_add_skill),
& && && && && && && &&&(store_mod,&:skill_id&,&:skill&,100),
& && && && && && && &&&(store_div,&:skill_value&,&:skill&,100),
& && && && && && && &&&(item_get_slot,&:proficiency&,&:now_item_id&,slot_item_add_proficiency),
& && && && && && && &&&(store_mod,&:proficiency_id&,&:proficiency&,10),
& && && && && && && &&&(store_div,&:proficiency_value&,&:proficiency&,10),
& && && && && && && &&&(troop_raise_attribute,&:troop_id&,&:attribute_id&,&:attribute_value&),
& && && && && && && &&&(troop_raise_skill,&:troop_id&,&:skill_id&,&:skill_value&),
& && && && && && && &&&(troop_raise_proficiency,&:troop_id&,&:proficiency_id&,&:proficiency_value&),
& && && && && && && &&&(try_begin),
& && && && && && && && && & (main_party_has_troop,&:troop_id&),
& && && && && && && && && & (str_store_troop_name,s9,&:troop_id&),
& && && && && && && && && & (str_store_item_name,s10,&:now_item_id&),
& && && && && && && && && & (display_message,&@{s9} have equipped the {s10}.&,0x5AFF3C),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:attribute_value&,0),
& && && && && && && && && && && &(store_add,&:attribute_name&,&:attribute_id&,&str_ca_strength&),
& && && && && && && && && && && &(str_store_string,11,&:attribute_name&),
& && && && && && && && && && && &(assign,reg11,&:attribute_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s11} up {reg11}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:skill_value&,0),
& && && && && && && && && && && &(store_add,&:skill_name&,&:skill_id&,&str_skl_0_trade&),
& && && && && && && && && && && &(str_store_string,12,&:skill_name&),
& && && && && && && && && && && &(assign,reg12,&:skill_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s12} up {reg12}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:proficiency_value&,0),
& && && && && && && && && && && &(store_add,&:proficiency_name&,&:proficiency_id&,&str_wpt_one_handed_weapon&),
& && && && && && && && && && && &(str_store_string,13,&:proficiency_name&),
& && && && && && && && && && && &(assign,reg13,&:proficiency_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s13} up {reg13}&),
& && && && && && && && && & (try_end),
& && && && && && && &&&(try_end),
& && && && && && &(try_end),&&#新特殊物品影响判断结束
& && && && &(troop_set_slot,&:troop_id&,&:old_inventory_slot&,&:now_item_id&), #最后,如果槽内物品改变,以上特殊物品判断结束后,将新物品覆盖给troop存储的该槽内的原先的装备,这点很重要,否则将会连续奖励或连续扣除
& && && &(try_end),& && && && &
& && &&&(try_end), #循环结束& &&&
& &),& & #触发器结束
[/spoiler]
至此,触发器部分即已完毕,剩下的是物品的初始化部分,即赋给物品是否特殊,以及各奖励量,此部分可以在script.py中的初始化部分加入。不过,以上触发器由于全部是用局域变量以及slot构成,没有用到全局变量,因此加入是不必开档的,要想在途中加入此功能,只需要加入一个单次触发器即可,比如:
[spoiler=单次触发器详解]QUOTE:& &(0, 0, ti_once,&&# 只触发一次
& && && &(try_for_range,&:troop_id&,&trp_player&,&trp_all_troops_end&), #循环,将所有troop的几个装备相关slot值置-1,因为slot默认为0,而槽内无装备则默认为-1,因此需要先默认定义所有troop槽内无装备,再看其现在的装备是否是特殊装备,然后存于slot中
& && && && & (try_for_range,&:num&,0,9),
& && && && && && &(store_add,&:old_inventory_slot&,slot_troop_ek_item_0,&:num&),
& && && && && && &(troop_set_slot,&:troop_id&,&:old_inventory_slot&,-1),
& && && && & (try_end),
& && && &(try_end),& &
& & (item_set_slot,&itm_practice_sword&,slot_item_special,1), #以练习剑为例,将其设为特殊物品
& &(item_set_slot,&itm_practice_sword&,slot_item_add_attribute,30), #个位=0,十位=3,即ID=0,值=3,也就是力量+3
& & (item_set_slot,&itm_practice_sword&,slot_item_add_skill,235), #id=35,值=2,即强击+2
& & (item_set_slot,&itm_practice_sword&,slot_item_add_proficiency,302), #id=2,值=30,即长杆熟练度+30
& &&&………………………… #按照自己需要定义
& &), #触发器结束 [/spoiler]
最后,不要忘记对quick_string.csv和string.csv中,对定义的string进行汉化。
至此,所有工作完毕。
总结一下我这段代码的特点,本代码适用于极品装备比较多,极品装备不唯一,装备奖励需要包含四围、技能和熟练度等多方面,还有需要对每个所装备的兵种都生效,这样的情况,当然,它是向下包含的,即使你要求没有那么多,也可以用此代码实现装备奖励。
同时,这段代码的缺点是,针对对象多,虽然尽量节省,但还是定义了多个slot槽。虽然只有一个触发器,但进行了多次循环,因此对资源的损耗会显多一些。
当然,各位modder可以按照自己的需要进行调整,优化,比如如果只需要玩家及NPC得到奖励,则可以将troop的循环调小;如果觉得批量信息slot不够理解,可以自行拆开;如果有其他想法,比如装备的养成,属性增加;再比如注入某能量后附加属性增加,等等想法都可以按照自己需要实现。
如果要求并没有这么多,完全可以利用我之前介绍的三种方法来实现。
总之,MOD的功能不在多,而在于是否适合MOD的背景于MODDER的想法;代码是死的,人是活的;代码是有限的,创意是无限的。
希望本文能给各位MODDER有所帮助。
[i=s] 本帖最后由 aliang227 于
15:36 编辑
装备附加奖励批量设置完整代码
本代码仅供各位modder和玩家学习和交流用,可自行使用,修改,但如果需要用在你的MOD中,请注明出处及作者,谢谢!
1,module_constants.py中增加:(建议放在相应ID位置,且请确认该ID未被使用)
[spoiler=module_constants.py]CODE:#======special item begin======
slot_item_special = 6
slot_item_add_attribute = 7
slot_item_add_skill = 8
slot_item_add_proficiency = 9
#======special item end====== CODE:#======special item begin======
slot_troop_ek_item_0 = 150
slot_troop_ek_item_1 = 151
slot_troop_ek_item_2 = 152
slot_troop_ek_item_3 = 153
slot_troop_ek_head = 154
slot_troop_ek_body = 155
slot_troop_ek_foot = 156
slot_troop_ek_gloves = 157
slot_troop_ek_horse = 158
#======special item end====== [/spoiler]
2,module_triggers.py中增加
[spoiler=module_triggers.py]CODE:#======special item begin======
& &(0.5, 0, 0,
& && &&&(try_for_range,&:troop_id&,&trp_player&,&trp_all_troops_end&),&&#make sure you have added troop:trp_all_troops_end
& && && && & (try_for_range,&:num&,0,9),
& && && && && && &(store_add,&:now_inventory_slot&,ek_item_0,&:num&),
& && && && && && &(store_add,&:old_inventory_slot&,slot_troop_ek_item_0,&:num&),
& && && && && && &(troop_get_inventory_slot,&:now_item_id&,&:troop_id&,&:now_inventory_slot&),
& && && && && && &(troop_get_slot,&:old_item_id&,&:troop_id&,&:old_inventory_slot&),
& && && && && && &(neq,&:now_item_id&,&:old_item_id&),
& && && && && && &(try_begin),
& && && && && && && &&&(gt,&:old_item_id&,0),
& && && && && && && &&&(item_slot_eq,&:old_item_id&,slot_item_special,1),
& && && && && && && &&&(item_get_slot,&:attribute&,&:old_item_id&,slot_item_add_attribute),
& && && && && && && &&&(store_mod,&:attribute_id&,&:attribute&,10),
& && && && && && && &&&(store_div,&:attribute_value&,&:attribute&,10),
& && && && && && && &&&(item_get_slot,&:skill&,&:old_item_id&,slot_item_add_skill),
& && && && && && && &&&(store_mod,&:skill_id&,&:skill&,100),
& && && && && && && &&&(store_div,&:skill_value&,&:skill&,100),
& && && && && && && &&&(item_get_slot,&:proficiency&,&:old_item_id&,slot_item_add_proficiency),
& && && && && && && &&&(store_mod,&:proficiency_id&,&:proficiency&,10),
& && && && && && && &&&(store_div,&:proficiency_value&,&:proficiency&,10),
& && && && && && && &&&(store_sub,&:attribute_value_sub&,0,&:attribute_value&),
& && && && && && && &&&(store_sub,&:skill_value_sub&,0,&:skill_value&),
& && && && && && && &&&(store_sub,&:proficiency_value_sub&,0,&:proficiency_value&),
& && && && && && && &&&(troop_raise_attribute,&:troop_id&,&:attribute_id&,&:attribute_value_sub&),
& && && && && && && &&&(troop_raise_skill,&:troop_id&,&:skill_id&,&:skill_value_sub&),
& && && && && && && &&&(troop_raise_proficiency,&:troop_id&,&:proficiency_id&,&:proficiency_value_sub&),
& && && && && && && &&&(try_begin),
& && && && && && && && && & (main_party_has_troop,&:troop_id&),
& && && && && && && && && & (str_store_troop_name,s9,&:troop_id&),
& && && && && && && && && & (str_store_item_name,s10,&:old_item_id&),
& && && && && && && && && & (display_message,&@{s9} have not equipped the {s10}.&,0xFF9600),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:attribute_value&,0),
& && && && && && && && && && && &(store_add,&:attribute_name&,&:attribute_id&,&str_ca_strength&),
& && && && && && && && && && && &(str_store_string,11,&:attribute_name&),
& && && && && && && && && && && &(assign,reg11,&:attribute_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s11} down {reg11}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:skill_value&,0),
& && && && && && && && && && && &(store_add,&:skill_name&,&:skill_id&,&str_skl_0_trade&),
& && && && && && && && && && && &(str_store_string,12,&:skill_name&),
& && && && && && && && && && && &(assign,reg12,&:skill_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s12} down {reg12}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:proficiency_value&,0),
& && && && && && && && && && && &(store_add,&:proficiency_name&,&:proficiency_id&,&str_wpt_one_handed_weapon&),
& && && && && && && && && && && &(str_store_string,13,&:proficiency_name&),
& && && && && && && && && && && &(assign,reg13,&:proficiency_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s13} down {reg13}&),
& && && && && && && && && & (try_end),
& && && && && && && &&&(try_end),
& && && && && && &(try_end),
& && && && && && &
& && && && && && &(try_begin),
& && && && && && && &&&(gt,&:now_item_id&,0),
& && && && && && && &&&(item_slot_eq,&:now_item_id&,slot_item_special,1),
& && && && && && && &&&(item_get_slot,&:attribute&,&:now_item_id&,slot_item_add_attribute),
& && && && && && && &&&(store_mod,&:attribute_id&,&:attribute&,10),
& && && && && && && &&&(store_div,&:attribute_value&,&:attribute&,10),
& && && && && && && &&&(item_get_slot,&:skill&,&:now_item_id&,slot_item_add_skill),
& && && && && && && &&&(store_mod,&:skill_id&,&:skill&,100),
& && && && && && && &&&(store_div,&:skill_value&,&:skill&,100),
& && && && && && && &&&(item_get_slot,&:proficiency&,&:now_item_id&,slot_item_add_proficiency),
& && && && && && && &&&(store_mod,&:proficiency_id&,&:proficiency&,10),
& && && && && && && &&&(store_div,&:proficiency_value&,&:proficiency&,10),
& && && && && && && &&&(troop_raise_attribute,&:troop_id&,&:attribute_id&,&:attribute_value&),
& && && && && && && &&&(troop_raise_skill,&:troop_id&,&:skill_id&,&:skill_value&),
& && && && && && && &&&(troop_raise_proficiency,&:troop_id&,&:proficiency_id&,&:proficiency_value&),
& && && && && && && &&&(try_begin),
& && && && && && && && && & (main_party_has_troop,&:troop_id&),
& && && && && && && && && & (str_store_troop_name,s9,&:troop_id&),
& && && && && && && && && & (str_store_item_name,s10,&:now_item_id&),
& && && && && && && && && & (display_message,&@{s9} have equipped the {s10}.&,0x5AFF3C),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:attribute_value&,0),
& && && && && && && && && && && &(store_add,&:attribute_name&,&:attribute_id&,&str_ca_strength&),
& && && && && && && && && && && &(str_store_string,11,&:attribute_name&),
& && && && && && && && && && && &(assign,reg11,&:attribute_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s11} up {reg11}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:skill_value&,0),
& && && && && && && && && && && &(store_add,&:skill_name&,&:skill_id&,&str_skl_0_trade&),
& && && && && && && && && && && &(str_store_string,12,&:skill_name&),
& && && && && && && && && && && &(assign,reg12,&:skill_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s12} up {reg12}&),
& && && && && && && && && & (try_end),
& && && && && && && && && & (try_begin),
& && && && && && && && && && && &(neq,&:proficiency_value&,0),
& && && && && && && && && && && &(store_add,&:proficiency_name&,&:proficiency_id&,&str_wpt_one_handed_weapon&),
& && && && && && && && && && && &(str_store_string,13,&:proficiency_name&),
& && && && && && && && && && && &(assign,reg13,&:proficiency_value&),
& && && && && && && && && && && &(display_message,&@{s9}'s {s13} up {reg13}&),
& && && && && && && && && & (try_end),
& && && && && && && &&&(try_end),
& && && && && && &(try_end),
& && && && && && &(troop_set_slot,&:troop_id&,&:old_inventory_slot&,&:now_item_id&),
& && && && & (try_end),& && && && &
& && &&&(try_end),& &&&
& &),& &&&
#======special item end====== [/spoiler]
3,module_scripts.py中,script_game_start里增加:
[spoiler=module_scripts.py]CODE:#======special item begin======
& && && &(try_for_range,&:troop_id&,&trp_player&,&trp_all_troops_end&),
& && && && & (try_for_range,&:num&,0,9),
& && && && && && &(store_add,&:old_inventory_slot&,slot_troop_ek_item_0,&:num&),
& && && && && && &(troop_set_slot,&:troop_id&,&:old_inventory_slot&,-1),
& && && && & (try_end),
& && && &(try_end),& &
#example:& &
#& && && &(item_set_slot,&itm_practice_sword&,slot_item_special,1),
#& && &(item_set_slot,&itm_practice_sword&,slot_item_add_attribute,30),
#& && && &(item_set_slot,&itm_practice_sword&,slot_item_add_skill,235),
#& && && &(item_set_slot,&itm_practice_sword&,slot_item_add_proficiency,302),
#& &&&………………………… #按照自己需要定义
#======special item end====== [/spoiler]
或在module_triggers.py里增加
[spoiler=module_triggers.py]CODE:#======special item begin======
& &(0, 0, ti_once,
& &[& && && &(try_for_range,&:troop_id&,&trp_player&,&trp_all_troops_end&),
& && && && & (try_for_range,&:num&,0,9),
& && && && && && &(store_add,&:old_inventory_slot&,slot_troop_ek_item_0,&:num&),
& && && && && && &(troop_set_slot,&:troop_id&,&:old_inventory_slot&,-1),
& && && && & (try_end),
& && && &(try_end),& &
#example:& &
#& && && &(item_set_slot,&itm_practice_sword&,slot_item_special,1),
#& && &(item_set_slot,&itm_practice_sword&,slot_item_add_attribute,30),
#& && && &(item_set_slot,&itm_practice_sword&,slot_item_add_skill,235),
#& && && &(item_set_slot,&itm_practice_sword&,slot_item_add_proficiency,302),
#& &&&………………………… #按照自己需要定义& &]
#======special item end====== [/spoiler]
4,module_strings.py里增加:
[spoiler=module_strings.py]CODE:#======special item begin======
&&(&ca_strength&,&ca_strength&),
&&(&ca_agility&,&ca_agility&),
&&(&ca_intelligence&,&ca_intelligence&),
&&(&ca_charisma&,&ca_charisma&),
&&(&wpt_one_handed_weapon&,&wpt_one_handed_weapon&),
&&(&wpt_two_handed_weapon&,&wpt_two_handed_weapon&),
&&(&wpt_polearm&,&wpt_polearm&),
&&(&wpt_archery&,&wpt_archery&),
&&(&wpt_crossbow&,&wpt_crossbow&),
&&(&wpt_throwing&,&wpt_throwing&),
&&(&wpt_firearm&,&wpt_firearm&),
&&(&skl_0_trade&,&skl_trade&),
&&(&skl_1_leadership&,&skl_leadership&),
&&(&skl_2_prisoner_management&,&skl_prisoner_management&),
&&(&skl_3_reserved_1&,&skl_reserved_1&),
&&(&skl_4_reserved_2&,&skl_reserved_2&),
&&(&skl_5_reserved_3&,&skl_reserved_3&),
&&(&skl_6_reserved_4&,&skl_reserved_4&),
&&(&skl_7_persuasion&,&skl_persuasion&),
&&(&skl_8_engineer&,&skl_engineer&),
&&(&skl_9_first_aid&,&skl_first_aid&),
&&(&skl_10_surgery&,&skl_surgery&),
&&(&skl_11_wound_treatment&,&skl_wound_treatment&),
&&(&skl_12_inventory_management&,&skl_inventory_management&),
&&(&skl_13_spotting&,&skl_spotting&),
&&(&skl_14_pathfinding&,&skl_pathfinding&),
&&(&skl_15_tactics&,&skl_tactics&),
&&(&skl_16_tracking&,&skl_tracking&),
&&(&skl_17_trainer&,&skl_trainer&),
&&(&skl_18_reserved_6&,&skl_reserved_6&),
&&(&skl_19_reserved_7&,&skl_reserved_7&),
&&(&skl_20_reserved_8&,&skl_reserved_8&),
&&(&skl_21_reserved_9&,&skl_reserved_9&),
&&(&skl_22_reserved_10&,&skl_reserved_10&),
&&(&skl_23_horse_archery&,&skl_horse_archery&),
&&(&skl_24_riding&,&skl_riding&),
&&(&skl_25_athletics&,&skl_athletics&),
&&(&skl_26_shield&,&skl_shield&),
&&(&skl_27_weapon_master&,&skl_weapon_master&),
&&(&skl_28_reserved_11&,&skl_reserved_11&),
&&(&skl_29_reserved_12&,&skl_reserved_12&),
&&(&skl_30_reserved_13&,&skl_reserved_13&),
&&(&skl_31_reserved_14&,&skl_reserved_14&),
&&(&skl_32_reserved_15&,&skl_reserved_15&),
&&(&skl_33_power_draw&,&skl_power_draw&),
&&(&skl_34_power_throw&,&skl_power_throw&),
&&(&skl_35_power_strike&,&skl_power_strike&),
&&(&skl_36_ironflesh&,&skl_ironflesh&),
&&(&skl_37_reserved_16&,&skl_reserved_16&),
&&(&skl_38_reserved_17&,&skl_reserved_17&),
&&(&skl_39_reserved_18&,&skl_reserved_18&),
&&(&skl_40_reserved_19&,&skl_reserved_19&),
&&(&skl_41_reserved_20&,&skl_reserved_20&),
#======special item end====== [/spoiler]
5,game_strings.csv中添加汉化:
[spoiler=game_strings.csv]CODE:
str_ca_strength|力 量
str_ca_agility|敏 捷
str_ca_intelligence|智 力
str_ca_charisma|魅 力
str_wpt_one_handed_weapon|单 手 熟 练 度
str_wpt_two_handed_weapon|双 手 熟 练 度
str_wpt_polearm|长 杆 熟 练 度
str_wpt_archery|弓 箭 熟 练 度
str_wpt_crossbow|弩 箭 熟 练 度
str_wpt_throwing|投 掷 熟 练 度
str_wpt_firearm|火 器 熟 练 度
str_skl_0_trade|交 易
str_skl_1_leadership|统 率
str_skl_2_prisoner_management|俘 虏 管 理
str_skl_3_reserved_1|skl_reserved_1
str_skl_4_reserved_2|skl_reserved_2
str_skl_5_reserved_3|skl_reserved_3
str_skl_6_reserved_4|skl_reserved_4
str_skl_7_persuasion|说 服 力
str_skl_8_engineer|工 程 学
str_skl_9_first_aid|急 救
str_skl_10_surgery|手 术
str_skl_11_wound_treatment|疗 伤
str_skl_12_inventory_management|物 品 管 理
str_skl_13_spotting|侦 查
str_skl_14_pathfinding|向 导
str_skl_15_tactics|战 术
str_skl_16_tracking|跟 踪
str_skl_17_trainer|教 练
str_skl_18_reserved_6|skl_reserved_6
str_skl_19_reserved_7|skl_reserved_7
str_skl_20_reserved_8|skl_reserved_8
str_skl_21_reserved_9|skl_reserved_9
str_skl_22_reserved_10|skl_reserved_10
str_skl_23_horse_archery|骑 射
str_skl_24_riding|骑 术
str_skl_25_athletics|跑 动
str_skl_26_shield|盾 防
str_skl_27_weapon_master|武 器 掌 握
str_skl_28_reserved_11|skl_reserved_11
str_skl_29_reserved_12|skl_reserved_12
str_skl_30_reserved_13|skl_reserved_13
str_skl_31_reserved_14|skl_reserved_14
str_skl_32_reserved_15|skl_reserved_15
str_skl_33_power_draw|强 弓
str_skl_34_power_throw|强 掷
str_skl_35_power_strike|强 击
str_skl_36_ironflesh|铁 骨
str_skl_37_reserved_16|skl_reserved_16
str_skl_38_reserved_17|skl_reserved_17
str_skl_39_reserved_18|skl_reserved_18
str_skl_40_reserved_19|skl_reserved_19
str_skl_41_reserved_20|skl_reserved_20[/spoiler]
6,quick_strings.csv中添加汉化:
[spoiler=quick_strings.csv]CODE:
qstr_{s9}_have_not_equipp|{s9}卸 下 了 【{s10}】
qstr_{s9}_s_{s11}_down_{r|{s9}的 {s11}下 降 {reg11} 点
qstr_{s9}_s_{s12}_down_{r|{s9}的 {s12}下 降 {reg12} 点
qstr_{s9}_s_{s13}_down_{r|{s9}的 {s13}下 降 {reg13} 点
qstr_{s9}_have_equipped_t|{s9}装 备 了 【{s10}】
qstr_{s9}_s_{s11}_up_{reg|{s9}的 {s11}上 升 {reg11} 点
qstr_{s9}_s_{s12}_up_{reg|{s9}的 {s12}上 升 {reg12} 点
qstr_{s9}_s_{s13}_up_{reg|{s9}的 {s13}上 升 {reg13} 点
[/spoiler]
[i=s] 本帖最后由 aliang227 于
15:02 编辑
拓展运用方法
拓展1:如何利用此代码思想实现套装功能?
不知大家有没有发现这段代码有个局限的地方,就是附加属性时,只能附加一种ID属性,也就是比如增加四围时,只能增加力量或敏捷中的一种,不能两种同时一起加。
那如果有MOD需要此功能应该如何做呢?一种方法是同时存在一个slot里,再留几位来判断;另一种方法是,增加slot种类。我这里再介绍除此以外的第三种,以套装形式实现。
我这里以最基本的套装功能为例,即套装共N件装备,当某兵种同时装备上这N件装备时,套装实现,属性附加;当兵种缺少其中之一时,套装条件不符合,附加属性扣去。
首先,要实现批量定义,还是需要定义slot:QUOTE:物品增加slot:slot_item_special_kind = 10
兵种增加slot:slot_troop_special_ek = 159 这两者的用处是什么呢?slot_item_special_kind 是用来给装备赋予套装ID值的,如哪些物品为套装1部件,则将其此值置1。这个可以在给予特殊物品附加属性的初始化中定义。
slot_troop_special_ek 是用来确定兵种的套装装备情况,同样,单ID存储多信息量,末位代表兵种的属性是否已经附加,是则置1,否则置0;其他位存储此兵种现在装备的套装ID。
我们设现在共有套装2件,套装1共有部件4个,套装2共有部件5个。首先在初始化中,给你需要的装备定义,也就是将套装1的四个部件slot_item_special_kind值置1,套装2的5个部件slot_item_special_kind 值置2。然后添加触发器如下:
可在上述同一触发器中,紧贴(troop_set_slot,&:troop_id&,&:old_inventory_slot&,&:now_item_id&),即可
[spoiler=套装触发器详解]& && && && &(assign,&:kind_amount&,0), #将此变量清零
& && && && && && &(try_for_range,&:num&,1,3), #共有套装2件,循环两次,:num为套装ID值
& && && && && && && &&&(try_for_range,&:item_slot&,ek_item_0,ek_food), #循环兵种装备
& && && && && && && && && & (troop_get_inventory_slot,&:item_id&,&:troop_id&,&:item_slot&), #获得装备的ID
& && && && && && && && && & (item_get_slot,&:kind&,&:item_id&,slot_item_special_kind), #获得该装备的slot_item_special_kind值,也就是属于哪类套装
& && && && && && && && && & (eq,&:kind&,&:num&), #如果属于现在正在循环的套装ID
& && && && && && && && && & (val_add,&:kind_amount&,1), #则将装备套装数量加一,也就是说,如果数量符合要求,则套装生效
& && && && && && && &&&(try_end), #装备循环结束
& && && && && && && &&&
& && && && && && && &&&(troop_get_slot,&:special&,&:troop_id&,slot_troop_special_ek), #获得兵种现在的套装状态
& && && && && && && &&&(store_mod,&:special_add&,&:special&,10), #取余获得兵种是否已经实现套装属性附加
& && && && && && && &&&(store_div,&:special_kind&,&:special&,10), #取除数获得兵种现在装备的套装种类 这两者如果没有则都为0
& && && && && && && &&&
& && && && && && && &&&(try_begin), #此段判断符合套装条件时,属性附加
& && && && && && && && && & (eq,&:num&,1), #循环的是套装1
& && && && && && && && && & (eq,&:kind_amount&,4), #兵种现在装备的套装总数为4
& && && && && && && && && & (eq,&:special_add&,0), #而且没有奖励时
& && && && && && && && && & #(give effect) #给予奖励,如raise_attribute;再或者display_message,如果兵种在队伍中,则显示影响。可以参照前者,此段省去,可按照自己需要自己附加
& && && && && && && && && & (assign,&:special_add&,1), #将未奖励标签置为已奖励
& && && && && && && && && & (assign,&:special_kind&,&:num&), #将奖励的套装ID存储
& && && && && && && &&&(else_try),
& && && && && && && && && & (eq,&:num&,2), #循环的是套装2时,类似上者,给予影响
& && && && && && && && && & (eq,&:kind_amount&,5),
& && && && && && && && && & (eq,&:special_add&,0),
& && && && && && && && && & #(give effect)
& && && && && && && && && & (assign,&:special_add&,1),
& && && && && && && && && & (assign,&:special_kind&,&:num&),
& && && && && && && &&&(try_end),
& && && && && && && &&&(try_begin), #此段判断兵种已有套装属性加成,但现在不符合套装条件时
& && && && && && && && && & (eq,&:special_add&,1), #已有属性加成
& && && && && && && && && & (eq,&:special_kind&,1), #已装备的套装ID为1
& && && && && && && && && & (neq,&:kind_amount&,4), #但此套装数量不足4,不满足套装条件
& && && && && && && && && & #(give neg effect) #扣除附加奖励
& && && && && && && && && & (assign,&:special_add&,0), #已奖励标签置0
& && && && && && && && && & (assign,&:special_kind&,0), #现在穿着套装ID置0
& && && && && && && &&&(else_try),
& && && && && && && && && & (eq,&:special_add&,1),
& && && && && && && && && & (eq,&:special_kind&,2), #已装备套装ID为2时,给予相应影响
& && && && && && && && && & (neq,&:kind_amount&,5),
& && && && && && && && && & #(give neg effect)
& && && && && && && && && & (assign,&:special_add&,0),
& && && && && && && && && & (assign,&:special_kind&,0),
& && && && && && && &&&(try_end),
& && && && && && && &&&(store_mul,&:new_special&,&:special_kind&,10), #将现在装备套装ID乘以10,放于10位以上
& && && && && && && &&&(val_add,&:new_special&,&:special_add&), #将是否奖励标签加于变量中,此两项代码是上述store_div和store_mod的逆操作
& && && && && && && &&&(troop_set_slot,&:troop_id&,slot_troop_special_ek,&:new_special&), #两信息同时存于slot_troop_special_ek中
& && && && && && &(try_end), #循环结束 [/spoiler]
以上即为最基本的套装功能实现,可以弥补只能单ID属性奖励的局限性,同时,更可以丰富MOD的游戏性。
当然,在实际加入时,可以再灵活运用下,比如,我这个只是最基本的套装,要集齐一套才有效果,如何实现集齐一部分也有加成呢? 再或者,现在每人只能装备一个套装,如果我要实现多套装并存,也就是,比如衣服是一套,双刀是一套,该如何实现呢?& &这个留给大家自己思考吧。
至此,套装功能及单slot多信息存储功能全部介绍完毕,如果今后还有想到可以扩展的地方,再来补充。个人能力有限,难免会有疏漏,也希望大家批评指正。
建议代码部分使用代码框和折叠按钮
刚上来就看到此贴,牛人就是牛人啊.......&&这次正好可以借着研究slot了
感谢分享,好好学习
扩展部分也已更新完毕,套装的实现功能在3楼给出了,以后想到什么扩展再来补充
另外,本帖关于slot的用法是属于原版代码中没有这样用过的,而灵活的掌握需要先对代码有一定熟悉程度,所以建议初学者先掌握好slot的基本用法,再研究此贴进行slot的高阶运用。
当然,如果你有一些更好的使用方法或心得及修正方法,也可以跟帖说明,大家一起学习。
感谢老凉分享,学习了,写得很精彩,后果很严重。在这先跟你说一声,我沿用了,谢谢。
牛人帖子必顶!!!!
完全看不懂~~~
源码不会,要是有TXT修改就好了
凉大,我按照2楼的方法一步一步的做了,为什么修改完以后没有效果呢?
我是在领军者1.230版本下改的,原版1.011。
我把添加到module_scripts.py或module_triggers.py中的中文字符删掉了,武器改成hunting_crossbow(猎弩,出身时候有)。在module_troops.py里添加了all_troops_end。在mod build时没有报错。
运行游戏也没有出错,但装备或取下猎弩时都没有奖励或惩罚。
请凉大帮我看看是什么原因?是否在module_constants.py添加的ID号需要改变?如何确认ID未被使用?
还有,这个代码在战团里是有效的吗?
先谢谢了!
我自己检查出问题了,就是定义物品前的井号忘删了。。。。。。
战团用没有问题。
我还有个问题,就是在contans.py里添加的:
slot_item_special = 6 。。。。。。
slot_troop_ek_item_0 = 150。。。。。。
后面的数字和新添加的程序有什么关联?
我改了一下,好像没有问题。是否可以随便写个数字?
QUOTE:我自己检查出问题了,就是定义物品前的井号忘删了。。。。。。
战团用没有问题。
我还有个问题,就是在contans.py里添加的:
slot_item_special = 6 。。。。。。
slot_troop_ek_item_0 = 150。。。。。。
zy05111 发表于
00:03 只要不和现有同类slot的数字重复即可。同类是指,都是troop的slot,或者是party的slot
谢谢14楼的回答。还有一个问题:
请问这两个slot都是troop的slot吗(同类的)?
slot_troop_days_on_mission = 150
slot_troop_ek_item_0=150
&slot_troop_days_on_mission = 150 &是在领军者constants.py里本来就有的的,和slot_troop_ek_item_0=150好像不冲突。
我承认我看不懂}

我要回帖

更多关于 骑马与砍杀武器前缀 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信