我已经知道自己的才能应该用到哪里了(指幼教),因此我以后会多做一些幼教osp帮助新手成长,让新手自己学着写功能(屑),顺便科普一下一些功能怎么用写这个帖子是因为我帮别人写这个基础功能时,由于我编功能有记录在一个txt里的,所以顺便发个osp做个幼教
我那个迷你游戏目前由于涉及东西略多,加上txt记录是一开始做完1.4版本的时候记录的,后面有几个bug所以没同步更新,因此还没干净的拆出来,故暂时不发出来献丑
constant部分
首先要在constant文件搜索PARTY SLOT来添加两个slot分别对应这个地点对应的兵种和cd时间
首先,找到partyslot的末尾,添加两个slot,注意这个数字不能是重复的,我根据经验表示如果你比较怂,是新手,那可以直接从500开始
slot的就是给物体赋予的额外属性,例如本文中的这两个属性就是给party这类物体赋予绑定兵种和招募倒计时这两个原本没有的属性
希望看了教学的萌新能光速举一反三出来
slot_center_specialtroop = 数字#特殊兵种
slot_center_specialtroop_cd = 数字#招募cd
然后,用任意方式在游戏开始时的脚本里给指定的party赋值,鉴于这里是幼教栏目我建议直接搜索item_info这个脚本,在这个脚本添加你想要绑定的地点和兵种
格式为(party_set_slot, "部队", slot_center_specialtroop, “兵种”),
这个是set的部分,打开你的header_operation还可以看到slot的其他用法
然后你可以用这个知识和你的英文储备/翻译软件去看看下面那些item的slot分别代表什么
然后打开menus菜单,在town这个大界面底下添加一个选项,用途是检查条件符合就跳转到新菜单
("recruit_special_troop",[
(party_slot_ge,"$g_encountered_party",slot_center_specialtroop,1),#检查是否有特殊兵种
(party_slot_eq,"$g_encountered_party",slot_center_specialtroop_cd,0),#检查是否在cd中
],"Take an action.",
[(jump_to_menu, "mnu_recruit_special_troop_menu"),]),#如果没有,那么跳转到新界面
然后接下来
在menus最底下那个]前面加上一个新菜单
("recruit_special_troop_menu",0,
"{s1}",
"none",
[
(party_get_slot,":troop_id","$g_encountered_party",slot_center_specialtroop),
(store_character_level,":level",":troop_id"),
(store_div,":level_div10",":level",10),
(store_sub,"$st_upper_limit",8,":level_div10"),#将8-这个城市绑定兵种等级的1/10,作为招募的上限数量
(store_div,":level_div25",":level",25),
(store_sub,"$st_lower_limit",3,":level_div25"),#将3-这个城市绑定兵种等级的1/25,作为招募的下限数量
(val_mul,":level",25),#将这个兵种等级*25作为招募费用
(try_begin),
(troop_is_mounted,":troop_id"),#如果是骑兵价格*2
(val_mul,":level",2),
(else_try),
(troop_is_guarantee_ranged,":troop_id"),#如果是射手价格*1.5
(val_mul,":level",3),
(val_div,":level",2),
(try_end),
(assign,"$st_cause",":level"),
(str_store_party_name,s11,"$g_encountered_party"),
(str_store_troop_name,s6,":troop_id"),
(assign,reg20,":level"),
(str_store_string, s1, "@shuodedaoli"),
],
[
("recruit_st",[
(store_mul,":max_cause","$st_upper_limit","$st_cause"),#确定玩家金钱超过最大随机数的兵种招募数量
(store_troop_gold,":gold","trp_player"),
(ge,":gold",":max_cause"),
(troops_can_join,"$st_lower_limit"),#和大于最小数量的位置
],"Back to camp menu.",
[ (val_add,"$st_upper_limit",1),#众所周知,骑砍取得上限实际上是上限-1
(store_random_in_range,":number","$st_lower_limit","$st_upper_limit"),#在最大随机数和最小随机数之间选取一个数
(party_get_slot,":troop_id","$g_encountered_party",slot_center_specialtroop),
(party_add_members,"p_main_party",":troop_id",":number"),#添加到玩家部队里
(store_mul,":gold_sub",":number","$st_cause"),
(troop_remove_gold,"trp_player",":gold_sub"),#扣钱
(party_set_slot,"$g_encountered_party",slot_center_specialtroop_cd,168),#这个是设置cd,自己调
(jump_to_menu, "mnu_town"),#返回
]),
]
),
("exit",[],"Back to camp menu.",
[(jump_to_menu, "mnu_town"),#无条件返回
]),
]),
最后加一个simple_trigger就可以了
(2,[
(try_for_range,":cur_town",centers_begin, villages_end),
(party_get_slot,":cd",":cur_town",slot_center_specialtroop_cd),
(gt,":cd",0),
(val_sub,":cd",2),
(party_set_slot,":cur_town",slot_center_specialtroop_cd,":cd"),
(try_end),
]),
这个触发器的含义是每两小时循环一遍所有据点,任何在cd内的据点cd时间-2
例如如果要做村子里使用这个功能,应该把所有涉及"mnu_town"的东西改成"mnu_village"
qstr汉化部分
qstr_shuodedaoli|{s11} 的 特 殊 兵 种 为 {s6} ^招 募 每 名 {s6}需 要 消 耗 {reg20} 第 纳 尔 。
menus汉化部分
mno_recruit_special_troop|招 募 当 地 特 色 兵 种 。
mno_recruit_st|招 募 一 队 。
mno_exit|返 回 。
最后建议所有新人在看本板osp的时候应该参考一下headeroperation自己试着解读
好好学习,天天向上
这也是我做幼教贴的目的
|