作者laechan (小太保)
看板mud_sanc
标题[wizs] 虚拟物品计划
时间Tue Oct 9 17:20:05 2007
拍谢,最近计划比较多,实作比较少,12 号之前我会尽量把
一些东西都实装。
=====================================================
首先会做的,是设定资料 mapping 格式。
mapping objs = ([
"potion_01" : 数量, ...
]);
list 时...
生命药水 : 10 ....
因此必须有个 "potion_01" -> "生命药水" 的函数与储存资
料..
/d/obj/data.c
==================================================
mapping data = ([
"potion_01" : "/d/obj/potion/01", ...
]);
mapping get_obj_data(string key_name)
{
object obj=find_object_or_load(data[key_name]);
return obj->query_ob_data();
}
问题就在於,当 potion_01 後面接的档名变更时,因为储存
在玩家身上的 key_name 是 potion_01,这将造成可能之前玩
家是拥有 生命药水 10 瓶 ,却变成拥有 巨大生命药水 10
瓶的情况。
因此还需要一个东西...
#define OBJ_DATA_CHANGE_TIMES 1 // 代表改变次数
mapping obj_key_name_change = ([
"potion_01" : "potion_02", // 代表旧的 potion_01 要变成 potion_02
]);
int check_key_name_change(object me)
{
if(me->query("record_data/obj_data_change_times")<OBJ_DATA_CHANGE_TIMES)
{
me->set(record_data/obj_data_change_times",OBJ_DATA_CHANGE_TIMES);
// 底下开始执行变更
}
这样就可以维持资料的更新。
=================================================================
以下是重点...
一、每一个虚拟物件,都会指向一个实体物件。该实体物件不是存在於
玩家身上,而是要读取资料时才会去 find_object_or_load 出来.
实际上被储存的资料是 ([ key_name : 数量 , ... ])
二、虚拟物品分为两种
1)可使用的。例如 potion。
2)不可使用的。例如打怪掉的一般收集品。
需要有「观看虚拟物品专用指令」(可能是 obj or i)、「虚拟物品
专卖店」(会写成可继承型式)、「虚拟物品使用指令」(可能会写在
obj 指令中或者 useobj 指令)。
三、虚拟物品的数量变更,必须有专门的函数处理。
四、必须为虚拟物品做分类,并撰写物件。
可以先做的是四。
我举例,假设以後推出固定补充底下效果的药水...
小型生命药水 : 基本10%+con影响
中型生命药水 : 基本25%+con影响
大型生命药水 : 基本40%+con影响
在 con 影响下即使你不买大型生命药水,你也可能可以只喝中型药水
,就达到「逼近甚至超过 40% 补充值」的效果。
(当然这时你喝大型的就补越多)
/d/obj/potion/potion_02.c
======================================================
inherit ROOM;
void create()
{
set("short","中型生命药水");
set("long",@LONG
可以补充较多生命力的药水,可补充40%的生命力。
LONG
);
set("value",5000);
}
string useobj_func(object ppl)
{
int hp=ppl->query("hp_src");
if((int)ppl->query("hp")>=hp)
return "你现在没有受伤, 不用喝喔.\n";
hp=(hp*40)/100 + con;
ppl->add_3p("hp",hp,hp);
return "ok";
}
在判断时...
check_str=obj->useobj_func(ppl);
if(check_str!="ok")
return notify_fail(check_str);
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.187.195