[wizs] 關於玩家斷線後重新回復連線
// /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
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
10
18