AykinDalike
|
分享:
▼
x20
|
[插件] [ZP]男女混打(共存)...實現!! 請進!!
有個辦法可以提供給各位參考 男角時男手 女角時女手 音效亦同上述之結果 男角時男聲 女角時女聲 不過你必須犧牲倖存者(survivor)這個角色 做法: 用 EmEditor3打開 zombie_plague40.sma 然後...follow me 1. 獨立模組(ak為例) 在各單位加入指令參數( 藍色部分) 步驟一 //Weapon Models new const model_vak47_survivor[] = { "models/v_ak472.mdl" } 步驟二 //Custom weapon models engfunc(EngFunc_PrecacheModel, model_vak47_survivor) 步驟三 //Set Custom Weapon Models public replace_models(id) { case CSW_AK47: // Survivor's AK47 { if (g_survivor[id]) set_pev(id, pev_viewmodel2, model_vak47_survivor) } ..... } 另外,『小刀』比較特殊,須要額外處理它 做法: 前兩步一樣,比照ak辦理 步驟一 // Weapon Models new const model_vknife_survivor[] = { "models/v_knife2.mdl" } 步驟二 // Custom weapon models engfunc(EngFunc_PrecacheModel, model_vknife_survivor) 步驟三 這裡要小心,要在else // Humans 條件下加入if (g_survivor[id]) 限制這是給survivor用的,如下... else // Humans & Survivor { { set_pev(id, pev_viewmodel2, model_vknife_human) set_pev(id, pev_weaponmodel2, "models/p_knife.mdl") } if (g_survivor[id]) { set_pev(id, pev_viewmodel2, model_vknife_survivor) } } 上述完成後再到該指定資料夾放入v檔就行了 2. 獨立音效(pain_sound為例) 一樣,在各單位加入.. 步驟一 // Sound list (randomly chosen, add as many as you want) new const survivor_pain[][] = { "zombie_plague/sur_pain1.wav" )
步驟二 // Custom sounds for (i = 0; i < sizeof survivor_pain; i++) engfunc(EngFunc_PrecacheSound, survivor_pain) 步驟三 這一步要 注意:容易和原先的zombie_pain弄混 先限制是給survivor獨立擁有 ( 藍色字體 if (g_survivor[id]) { }內整段) 而且重點是原先的zombie_pain也要做一點點更動 (黑色字體部分) 另外 紅色字的是survivor的fall_sound (survivor_fall) survivor_fall前兩步的做法跟survivor_pain是一樣的,就不多做說明 排列方式請看... // Emit Sound Forward public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { if (g_survivor[id]) { // Replace these sounds for Survivor only if (!is_user_connected(id) || !g_survivor[id]) return FMRES_IGNORED;
// Survivor being hit if (equal(sample[7], "bhit", 4)) { if (g_survivor[id]) engfunc(EngFunc_EmitSound, id, channel, survivor_pain[random_num(0, sizeof survivor_pain - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } // Survivor falls off if (equal(sample[10], "fall", 4)) { engfunc(EngFunc_EmitSound, id, channel, survivor_fall[random_num(0, sizeof survivor_fall - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } return FMRES_IGNORED; } if (g_zombie[id] || !g_nemesis[id]) { // Replace these sounds for zombies only if (!is_user_connected(id) || !g_zombie[id]) return FMRES_IGNORED;
// Zombie being hit if (equal(sample[7], "bhit", 4)) { if (g_nemesis[id]) engfunc(EngFunc_EmitSound, id, channel, nemesis_pain[random_num(0, sizeof nemesis_pain - 1)], volume, attn, flags, pitch) else engfunc(EngFunc_EmitSound, id, channel, zombie_pain[random_num(0, sizeof zombie_pain - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } // Zombie attacks with knife if (equal(sample[8], "kni", 3)) { if (equal(sample[14], "sla", 3)) // slash { engfunc(EngFunc_EmitSound, id, channel, zombie_miss_slash[random_num(0, sizeof zombie_miss_slash - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } if (equal(sample[14], "hit", 3)) { if (sample[17] == 'w') // wall { engfunc(EngFunc_EmitSound, id, channel, zombie_miss_wall[random_num(0, sizeof zombie_miss_wall - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } else // hit { engfunc(EngFunc_EmitSound, id, channel, zombie_hit_normal[random_num(0, sizeof zombie_hit_normal - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } } if (equal(sample[14], "sta", 3)) // stab { engfunc(EngFunc_EmitSound, id, channel, zombie_hit_stab[random_num(0, sizeof zombie_hit_stab - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } }
// Zombie dies if (equal(sample[7], "die", 3) || equal(sample[7], "dea", 3)) { engfunc(EngFunc_EmitSound, id, channel, zombie_die[random_num(0, sizeof zombie_die - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; }
// Zombie falls off if (equal(sample[10], "fall", 4)) { engfunc(EngFunc_EmitSound, id, channel, zombie_fall[random_num(0, sizeof zombie_fall - 1)], volume, attn, flags, pitch) return FMRES_SUPERCEDE; } } return FMRES_IGNORED; } 上述完畢後,類推,把音效檔放到該指定資料夾 → 沒問題 續~ 還沒完喔 請看1F 內容太多按發表都當機 所以分頁說明之
[ 此文章被AykinDalike在2010-05-29 13:04重新編輯 ]
此文章被評分,最近評分記錄財富:500 (by killer699) | 理由: 強! | |
|
|
|
|
x11
[樓 主]
From:台灣中嘉寬頻 | Posted:2009-11-15 17:15 |
|
|
AykinDalike
|
分享:
▲
▼
3. 模式設置 讓survivor在任何模式都能出現(multi_infection為例) 加入 藍色字體部分,其他不用理他,全放上來目的讓你看清楚它的位置,請看... { // Multi Infection Mode g_lastmode = MODE_MULTI // iMaxZombies is rounded up, in case there aren't enough players iMaxZombies = floatround(iPlayersnum*get_pcvar_float(cvar_multiratio), floatround_ceil) iZombies = 0
// Turn someone into a Survivor id = fnGetRandomAlive(random_num(1, iPlayersnum)) humanme(id, 1)
// Randomly turn iMaxZombies players into zombies while (iZombies < iMaxZombies) { // Keep looping through all players if (id++ > g_maxplayers) id = 1
// Dead or already a zombie if (!is_user_alive(id) || g_zombie[id]) continue;
// Random chance if (random_num(0, 1)) { // Turn into a zombie zombieme(id, 0, 0, 1) iZombies++ } }
// Turn the rest of players into humans for (id = 1; id <= g_maxplayers; id++) { // Only those of them who aren't zombies or survivor if (!is_user_alive(id) || g_zombie[id] || g_survivor[id]) continue
// Remove previous tasks remove_task(id+TASK_TEAM)
// Switch to CT if (fm_get_user_team(id) != CS_TEAM_CT) // need to change team? { fm_set_user_team(id, CS_TEAM_CT) set_task(0.1+g_teams_i, "fm_set_user_team_msg", id+TASK_TEAM) g_teams_i += 0.1; // increase teams task counter } }
// Play multi infection sound PlaySound(sound_multi[random_num(0, sizeof sound_multi -1)]);
// Show Multi Infection HUD notice set_hudmessage(200, 50, 0, HUD_EVENT_X, HUD_EVENT_Y, 1, 0.0, 5.0, 1.0, 1.0, -1) ShowSyncHudMsg(0, g_MsgSync, "%L", LANG_PLAYER, "NOTICE_MULTI")
// Round start forward ExecuteForward(g_fwRoundStart, g_fwDummyResult, MODE_MULTI, 0); } 4. 屬性設置 讓survivor在任何模式下都不會被感染 這項不加的話,survivor是會被攻擊變成殭屍的 如果想看他變殭屍的話,這段別理他 做法: ctrl+f 鍵入human is killed 找到以下這段...加入 g_survivor[victim] // Last human or swarm round or plague round if (g_swarmround || g_plagueround || fnGetHumans() == 1 || g_survivor[victim]) return HAM_IGNORED; // human is killed 5. 武器設置 5-1 丟槍 把survivor不能丟武器的 藍色部分指令換成nemesis 換言之,把不能丟武器的行為主體改成nemesis (他本來就沒有武器所以沒差) // Weapon Drop public clcmd_drop(id) { // Survivor should stick with M249 if (g_survivor[id]) return PLUGIN_HANDLED; return PLUGIN_CONTINUE; } 5-2 撿槍 把survivor不能撿槍的指令改為zombie 前項為一般玩家,後項則改為限制給bot ( 藍色部分) // Ham Weapon Touch Forward public fw_TouchWeapon(weapon, id) { // Not a player if (!is_user_connected(id)) return HAM_IGNORED; // Dont pickup weapons if zombie or survivor if (g_zombie[id] || (g_survivor[id] && !is_user_bot(id))) return HAM_SUPERCEDE; return HAM_IGNORED; } 5-3 給槍 給予survivor什麼槍? 藍色部分是舉例,當然你可以換成任何CS內建的武器 請看... // Strip survivor from weapons and give M249 fm_strip_user_weapons(id) fm_give_item(id, "weapon_knife") fm_give_item(id, "weapon_hegrenade") fm_give_item(id, "weapon_p228") fm_give_item(id, "weapon_mp5navy") fm_give_item(id, "ammo_9mm") fm_give_item(id, "ammo_9mm") fm_give_item(id, "ammo_9mm") fm_give_item(id, "ammo_9mm") fm_give_item(id, "ammo_357sig") fm_give_item(id, "ammo_357sig") fm_give_item(id, "ammo_357sig") fm_give_item(id, "ammo_357sig") fm_give_item(id, "ammo_357sig") 5-4 bpammo 這是為什麼surv 的後備子彈無限的原因了( 藍色) 你要哪把槍無限在這邊調整即可 也可以全部都無限或都有限(有在這加入的武器前項5-3的 "ammo_xxx" 就不需要了) // Unlimited BPAmmo? if ((infammo && MAXBPAMMO[weapon] > 2) || (g_survivor[msg_entity] && weapon == CSW_M249)) { if (fm_get_user_bpammo(msg_entity, weapon) < MAXBPAMMO[weapon]) fm_set_user_bpammo(msg_entity, weapon, MAXBPAMMO[weapon]) } 5-5 clip ammo 這是為什麼surv 膛上子彈無限的原因( 藍色) // Unlimited Clip Ammo? if ((infammo > 1 && MAXCLIP[weapon] > 0) || (g_survivor[msg_entity] && weapon == CSW_M249)) { // HUD should show full clip all the time set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // Refill when clip is nearly empty if (clip < 3) fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon]) } 5-6 extra items 讓surv 可以進入選單購買特殊武器 刪掉以下三處... (1) // 2. Extra items if (!g_survivor[id] && !g_nemesis[id] && get_pcvar_num(cvar_extraitems) && is_user_alive(id)) len += formatex(menu[len], sizeof menu - 1 - len, "\r2.\w %L^n", id, "MENU_EXTRABUY") (2) // Extra items enabled? if (get_pcvar_num(cvar_extraitems)) { // Check whether the player is able to buy anything if (is_user_alive(id) && !g_survivor[id] && !g_nemesis[id]) show_menu_extras(id) else zp_colored_print(id, "^x04[ZP]^x01 %L", id ,"CMD_NOT") } (3) // Extra Items Menu public menu_extras(id, key) { // Nemesis or Survivor shouldnt get extra items if (g_survivor[id] || g_nemesis[id] || !is_user_alive(id)) { zp_colored_print(id, "^x04[ZP]^x01 %L", id, "CMD_NOT") return PLUGIN_HANDLED; } 乎~ 基本上這樣已經差不多了 [ 補充]: 1. 武器看你要設幾個(隨你高興),可以把CS內鍵的24把槍、小刀和手榴彈都獨立給survivor 但請注意!!!...超過10個模組的話可能會出錯 必須在設定上面做點調整 以下 藍色部分就是它的上限值... // Dynamic Stuff Limiters (increase if needed) const MAX_EXTRA_ITEMS = 30 const MAX_ZOMBIE_CLASSSES = 20 const MAX_CSDM_SPAWNS = 128 const MAX_STATS_SAVED = 64 const MAX_MODELS_NEMESIS = 10 const MAX_MODELS_SURVIVOR = 10 const MAX_MODELS_HUMAN = 20 const MAX_MODELS_ADM_HUMAN = 10 const MAX_MODELS_ADM_ZOMBIE = 10 2. 同樣的,聲音檔看你要放幾個來源都行 3. 把survivor 移到哪個模式出現也都看個人,方法雷同 swarm模式要特別留意,有需要再跟大家說 4. 和 5.就是可有可無了,自個兒斟酌囉 [ 補充2]: // Single Infection Mode g_lastmode = MODE_INFECTION
if (fnGetHumans() > 1) { // Turn player into the first zombie zombieme(id, 0, 0, 0) }
if (fnGetHumans() >= 1) { // Turn someone into a Survivor (if not a zombie) while (g_zombie[id]) id = fnGetRandomAlive(random_num(1, iPlayersnum)); humanme(id, 1) }
// Randomly turn iMaxZombies players into zombies while (iZombies < iMaxZombies) { // Keep looping through all players if (id++ > g_maxplayers) id = 1 // Dead or already a zombie or survivor if (!is_user_alive(id) || g_zombie[id] || g_survivor[id]) continue; // Random chance if (random_num(0, 1)) { // Turn into a zombie zombieme(id, 0, 0, 1) iZombies++ } } ... ....... // First zombie/nemesis or survivor if (!is_user_alive(id) || g_zombie[id] || g_survivor[id])
說明:如果要把surv改到一般模式出現需注意 (略有不同) 原因:若不定義『當有一位殭屍出現後的這個殭屍不會變倖存者』的話 是會有可能沒殭屍的喔,因為surv定義在殭屍出現後的下一秒發生 所以要排除掉可能殭屍和倖存者都隨機選到同一人的bug 一般模式加入surv 修正後只剩下一個地方怪怪的,就是當遊戲室只有adm
一人的時候可能會有問題,不過應該沒有人開殭屍自己玩的吧?跟誰玩? 解:這點也解決了!! 做了點調整後不會有任何問題 !! [ 補充3]: 本來不想加的 但是這樣應該會更有說服力 若想要你的1.6更趨近CSO 當然不能只有一個女角嘛 意思是...你可以創多個倖存者 告訴大家 ...加在[ 補充2] 以下...( 藍色) // Single Infection Mode g_lastmode = MODE_INFECTION
if (fnGetHumans() > 1) { // Turn player into the first zombie zombieme(id, 0, 0, 0) } if (fnGetHumans() >= 1) { // Turn someone into a Survivor(if ont a zombie) while (g_zombie[id]) id = fnGetRandomAlive(random_num(1, iPlayersnum)); humanme(id, 1) } if (fnGetHumans() >= 5) { while (g_survivor[id] || g_zombie[id]) id = fnGetRandomAlive(random_num(1, iPlayersnum)); humanme(id, 1) } if (fnGetHumans() >= 9) { while (g_survivor[id] || g_zombie[id]) id = fnGetRandomAlive(random_num(1, iPlayersnum)); humanme(id, 1) }
以上修改客體為補充2的single infection mode 設置成當遊戲室人數達5人以上(包含5)會出現2個倖存者、9人以上(包含9)會出現3個倖存者... 以此類推...改在任何模式都隨己意!!有興趣者可自行修改單局倖存者數量與人數條件...或採半數為倖存者亦可... 順道一提... 武器設置的部分你有三個選擇... 1. 前面教過的 5-3 2. 差件區的『倖存者選擇武器插件』 3. 此最為理想...做法: 5-3只給刀、且把fm_strip_user_weapons(id) 刪除 這樣就會延用殭屍出現前人類選的武器,直接換到女角手上的意思 當然模組也跟著你的設定隨之換成女手!! [ 補充4] 作用:使得倖存者可開啟手電筒照明 刪除以下 紅色部分 // Block it for zombies, survivor (and override it for humans when custom flashlight is on) if (g_zombie[id] || g_survivor[id] || (!g_zombie[id] && get_pcvar_num(cvar_cflash))) { // Human's custom flashlight should be turned on instead if (!g_zombie[id] && !g_survivor[id] && get_gametime() - g_lastflashtime[id] > 1.1) // Strip survivor from weapons and give M249 fm_strip_user_weapons(id) fm_give_item(id, "weapon_knife") fm_give_item(id, "weapon_m249") // Turn off his flashlight turn_off_flashlight(id) 還有讓身為bot的surv在需要時買備用彈 紅色部分刪除,否則bot用完彈就只會拿刀囉 // Bots automatically buy ammo when needed if (!g_zombie[msg_entity] && !g_survivor[msg_entity] && g_ammopacks[msg_entity] > 0 && MAXBPAMMO[weapon] > 2 && is_user_bot(msg_entity) && fm_get_user_bpammo(msg_entity, weapon) <= BUYAMMO[weapon]) clcmd_buyammo(msg_entity); 以上修改了幾點要件: survivor(倖存者)武器、音效被獨立出來(與一般人類和殭屍分開) 而他又可以撿槍丟槍、子彈有限、可以買特殊武器、又出現在任何模式 血量就看你打算給他多少 基本上她已經變成一般人了 當然可以把她設成女角 結果是... 當然就 可以男女混打啦!! 系統會在各種模式下等待殭屍出現後 隨機選一人(或一人以上)當女角
其他的都還是男生 就看這些男生要不要保護她了 測試結果大概90分,出現唯一的缺點是 伺服器人數要在>=5才會正常運行 不然會有回合出現沒殭屍的狀況 上述問題已解決 要1vs1也行 跟伺服器人數多寡無關 總之人類那一方都會有一人(或數人)被隨機選為女角 如果是1打1的話 就變成1殭屍1女角 2打1的話就1殭屍1女角1男角 以此類推 如果也加入補充3的話 那就看你是定義有幾個女角了 個人測試滿意度上升到97%
個人測試滿意度上升至99% 所以製作前請先 "備份" 但基本上玩殭屍也很少1對1的吧 (揚言pk那種除外) 因為圖大,人太少沒甚麼看頭 都給你跑就好了 還有radio目前還沒研究出怎麼獨立給survivor用 我看那要是po上來也是一大篇幅 這篇單是打在word就10頁了 目前已找到解決辦法處理無線電的問題了 測試結果非常成功 更興奮的是連殭屍無線電也能一起改出來 (男角、女角以及殭屍的z、x、c語音完整呈現) 而且重點是不會占用系統512mb資源 因為並非新增音效來源 而是用id 判斷玩家身分後取代音效 例如身為女角,使用無線電呼叫時 聲音會直接被取代成女角的無線電語音 還剩下一點點小bug排除中 (近期考慮發表在插件區) 好啦 希望各位喜歡!!
[ 此文章被AykinDalike在2010-05-18 14:10重新編輯 ]
|
|
x3
[1 樓]
From:台灣中嘉寬頻 | Posted:2009-11-15 17:38 |
|
|
|