看板 mud_sanc 關於我們 聯絡資訊
※ 引述《laechan (小太保)》之銘言: : 推 bahatest :仇恨值?挑釁?OT? 06/13 14:26 : 推 hermis :太複雜了我看不懂@@||| 06/13 15:49 以怪物的 query_current_attacker 為例.. /std/mob/living.c object query_current_attacker() { int i,r; object current_tar; // temp_data["ats"] = 與怪物處於戰鬥狀態的所有物件(一般是玩家群) // 下面的意思就是若與怪物處於戰鬥狀態的物件數>0, 代表戰鬥中 if(i=sizeof(temp_data["ats"])) { // 先扣掉集合中為 0 的, 會有 0 的原因, 例如瞬間的 recall, quit, 斷線, .. temp_data["ats"]-=({0}); // 再重覆一次判斷 if(i=sizeof(temp_data["ats"])) { // 跑出隨機數 r=random(i); // 如果怪物要攻擊的目標-玩家A, 它身上有 temp_data["current_attacker"] // 時, 就指定實際要攻擊的目標為這個 current_attacker // (一般情況下 current_attacker = 自己, 這是 default 值) if(current_tar=(object)temp_data["ats"][r]->query_temp("current_attacker")) { // 而且這個 current_attacker 不是自己時才打(避免自己打自己) // 不過這裡判斷有點問題就是了, 等微調方向確定時一併修改 if(current_tar!=me) current_tar->kill_ob(me); return current_tar; } else return temp_data["ats"][r]; } // 上面基本上就是回傳隨機一個對象回去給怪物, 讓怪物去攻擊這個對象 } } 所以 10 個玩家衝進去房間殺一隻怪物時, 這隻怪物每一回合的攻擊, 每一 個玩家都有 1/10 的機率被攻擊到. 因為怪物在做攻擊時「幾乎」都是以 query_current_attacker 做為讀取出 攻擊對象的主要函數, 所以目前的「隨機讀取」就是所謂的 default 設定. 未來想調整的方向.. 一、可以設定讓怪物可以略過對某些玩家的攻擊 => 但是相對的其它玩家被攻擊到的機率就會增加 二、攻擊對象 a 時, a 或 b 有辦法讓該攻擊轉向 b. => 等於 b 實際上在保護 a 的意思 (這個很久以前就有實裝, 但是有 bug, 所以其實是沒啟用的狀態) Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.170.108.37