引用 | 編輯
timmy3a
2014-06-28 22:56 |
樓主
▼ |
||
x0
早前 發問過手雷拖尾 大家反應都不錯~~今次有個新的問題 請教大家怎麼寫 ----------SMA----------- [ ] = 問:需要的碼怎寫? [玩家-attacker] :[攻擊]: [實體-entity] Set _ [實體無傷害]/不減血/減0血 ------------------------------ PS:不需提供 實體血量寫法 有可能寫到嗎?? 構思來源: gmsentryguns.amxx AS: https://forums.alliedmods.net/showthread.php?p=696478?p=696478 隊友經常惡意破壞隊伍的炮台; 想編寫解決此問題的方法 ----------SMA----------- [ ] = 問:需要的碼怎寫? 簡單點來說: 就是相反的~ 如何編寫 [實體 偵測 打擊者是哪個隊伍]? 在ham_const 裡面有這個似乎可以用; 但我還是不懂寫 /** * Description: Usually called whenever an entity takes any kind of damage. * Inflictor is the entity that caused the damage (such as a gun). * Attacker is the entity that tirggered the damage (such as the gun's owner). * Forward params: function(this, idinflictor, idattacker, Float:damage, damagebits); * Return type: Integer. * Execute params: ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, Float:damage, damagebits); */ Ham_TakeDamage, x0
|
引用 | 編輯
op47
2014-06-29 11:38 |
1樓
▲ ▼ |
RegisterHamFromEntity(Ham_TakeDamage, 物件ID, "fw_takedamage")
在創造物體時只注冊一次好了, 否則就會出現多個fw_takedamage. x0 |
引用 | 編輯
弒血
2014-06-29 17:30 |
2樓
▲ ▼ |
下面是引用 timmy3a 於 2014-06-28 22:56 發表的 SMA編寫 詢問[實體偵測被攻擊]: 如同一樓所說 #include <amxmodx> #include <fakemeta> #include <hamsandwich> // 自訂攻擊對象..info_target 只是個例子..可以修改. #define ENITIY_TYPE "info_target" public plugin_init() RegisterHamFromEntity(Ham_TakeDamage, ENITIY_TYPE, "fw_takedamage"); public fw_takedamage(victim, inflictor, attacker, Float:damage, damage_type) { //判斷 受害者如果是攻擊者對象的團隊 or 受害者的持有者不是攻擊者的話 傷害就會無效返回.. if (pev(victim, pev_team) == pev(attacker, pev_team) || pev(victim pev_owner) != attacker) return HAM_SUPERCEDE; //這邊放你要的...傷害 return HAM_IGNORED; } x0 |
引用 | 編輯
op47
2014-06-30 17:17 |
3樓
▲ ▼ |
下面是引用 s8720419 於 2014-06-29 17:30 發表的 : Nope. RegisterHamFromEntity 不可以在 plugin_init 注冊, 因為你不能夠獲得物件的id, 要獲得 id 就必須在物件存在的時候注冊, 例如一般情況下, 大部份scripter 會在 client_putinserver 對 zbot 注冊, 而物件就會在創造的時候注冊. 如果要在 plugin_init 裏注冊 , 就要用到 RegisterHam(Ham_TakeDamage,"yyy","xxx"), 其中 yyy 不是物件的 id 而是 classname. x0 |
引用 | 編輯
弒血
2014-06-30 19:23 |
4樓
▲ ▼ |
下面是引用 op47 於 2014-06-30 17:17 發表的 : 恩 看來是我搞錯了 RegisterHamFromEntity 只有在取得物件id時才可以使用 RegisterHam 然而這個 則是在註冊時 選擇對象類型 x0 |
引用 | 編輯
timmy3a
2014-07-10 00:00 |
7樓
▲ ▼ |
下面是引用 s8720419 於 2014-07-09 21:47 發表的 : 炮台的插件 由建立到 破壞 由3大部份組成 1.1 new entbase = create_entity("func_breakable") // func_wall || 可破壞的ENTITY [炮架] 1.2 new ent = create_entity("func_breakable") || 可破壞的ENTITY [炮身] 2. new const Float:g_HEALTHS[3] = {600.0, 500.0, 400.0} || 設置ENTITY 的血量 3. if (entity_get_float(g_sentries, EV_FL_health) <= 0.0) || 如ENTITY 血量歸0 就破壞了 問題就是由這3點出發 由頭到尾 設定的碼是[可破壞的ENTITY] 當中沒設定隊伍~ -------- 隊伍設定== (在開火模式才設定) -------- 文章回覆的資料 暫時 只有以下能用上 ## 傷害就會無效返回 == return HAM_SUPERCEDE; 那請問我要如何設定詳細的 ?? 1.RegisterHam 或者 RegisterHamFromEntity 呢?~ ~~~~~我是善長用插件 創造遊戲的人~ 但插件上一定要有配合 才能協調遊戲吧 1個人的腦子是不夠的 請大大繼續幫忙一下~ = ] ~~~~~~ 以後是 暫時能構思到的解決[ SMA碼 ] 未完整 , 請修補~~ // Set team[設定炮台者的TEAM CT/TR] entity_set_int(ent, SENTRY_INT_TEAM, get_user_team(creator)) 那條件可改為 如 創造者 不等於 TARGET TEAM = [[ TEAMMATE && 炮台血量 大於0 ]] if (get_user_team(creator) != get_user_team(target) && (entity_get_float(g_sentries, EV_FL_health) > 0.0)) 傷害無效??((return HAM_SUPERCEDE;)).... 所以就是要問HAM的東西怎麼寫了..... 求細心解答 ~~~~~~如不明白 我在討論什麼 請下載SMA 打開看看, 再空頭白話沒有結果~~~~~~~~~~~ 構思來源: gmsentryguns.amxx AS: https://forums.alliedmods.net/showthread.php?p=696478?p=696478 x0 |
引用 | 編輯
弒血
2014-07-14 14:09 |
8樓
▲ |
下面是引用 timmy3a 於 2014-07-10 00:00 發表的 : 如果只是想要單純的破壞同隊傷害的效果 先在砲台建立那邊新增隊伍判斷,把砲台設定成同隊伍 // set_pev(ent, pev_team, id); ent = 物件, id = 玩家 再來...再傷害那邊使用判斷, 判斷攻擊者隊伍如果跟受害者隊伍, 是一樣時就取消傷害... // if (pev(attacker, pev_team) == pev(victim, pev_team)) return HAM_SUPERCEDE; 另外 如果 想對物件造成傷害 直接在 物件創立時..加上 RegisterHamFromEntity(Ham_TakeDamage, ent, "fw_TakeDamage") 然而 fw_TakeDamage 就是..傷害的function... x0 |