作者laechan (小太保)
看板mud_sanc
标题[wizs] 关於玩家断线後重新回复连线
时间Tue Apr 6 14:14:31 2010
// /std/user.c
int restart_heart()
{
object env;
say( query("cap_name")+" 重新连线.¥n");
write("重新连上圣殿英雄传说.¥n");
ANNOUNCE->announce_user(me,2);
USERID_D->query_userid();
set_heart_beat(1);
delete_temp("kick_time");
#ifdef RECONNECT_LOG
log_file(RECONNECT_LOG,data["cap_name"]+" "+query_ip_name(me)+
" "+Ctime(5) + "¥n");
#endif
if(env=environment(me))
me->move_player(base_name(env),"SNEAK");
return 1;
}
亮蓝色部份为最近 norr 所需求的功能,如上所示,原先就有
回复连线後 me 做 move_player 到所在地点的动作,该动作原
先的起始用意是,若玩家在有主动怪的地方断线後重连,就会
重新对主动怪做 init_attack。
现在这部份可以应用到 void init 函数中,因 me 会 move 房
间一次,这时就会呼叫到房间的 init,则此时就可由 init 函
数判断玩家已回复心跳。
至於断线瞬间的判断..
void net_dead()
{
object env;
say( query("cap_name") + " 不小心踢到了网路线了.¥n");
map_delete(temp_data,"ats"); // 移除所有战斗对象
map_delete(temp_data,"msg_buf"); // 移除所有 msg_buf
map_delete(temp_data,"special_attack"); // 移除所有 special_attack
ANNOUNCE->announce_user(me,3);
CMWHO_D->remove_user(me);
if(query("record_data/netdead_time")<1)
set_heart_beat(0);
link->remove();
if(env=environment(me))
if(function_exists("check_net_dead",env))
env->check_net_dead(me);
}
亮蓝色部份是 norr 目前有需求、但程式码尚未写,而可以
考虑加进去的。
这部份有空我会跟 nobu 讨论一下,或者用较简单的如下..
if(env=environment(me))
if(env->query("netdead_move_room"))
me->move_player((string)env->query("netdead_move_room"),"SNEAK");
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.161.52