接續
今次講下提取武器參數既寫法
由於IPVE個代碼顯示唔識自動換行我將部份代碼進行簡化
複製內容到剪貼板
代碼:
GetClientWeaponInfo_l4d2(client , &ammo, &clip, &upgradeBit, &upammo)
{
new slot=0;
new ent=GetPlayerWeaponSlot(client, slot);
if ( ent> 0)
{
new String:weapon[32];
new ammoOffset = FindSendPropInfo("CTerrorPlayer", "m_iAmmo");
GetEdictClassname(ent, weapon, 32);
upgradeBit = GetEntProp(ent, Prop_Send, "m_upgradeBitVec");
upammo = GetEntProp(ent, Prop_Send, "m_nUpgradedPrimaryAmmoLoaded");
clip = GetEntProp(ent, Prop_Send, "m_iClip1");
if (StrEqual(weapon, "weapon_rifle") || StrEqual(weapon, "weapon_rifle_sg552") ||
StrEqual(weapon, "weapon_rifle_desert")|| StrEqual(weapon, "weapon_rifle_ak47"))
ammo = GetEntData(client, ammoOffset+(12));
else if (StrEqual(weapon, "weapon_rifle_m60") )
ammo = GetEntData(client, ammoOffset+(12));
else if (StrEqual(weapon, "weapon_smg") || ......
}
}
首先要target左你要拎既player既client id
作者用client黎做代號
跟住作者開一個用GetPlayerWeaponSlot黎
取得slot 0 即係主武器位置既entity (題外話: slot 0-4 分別對應主武器,副武器, 投擲類, 醫療類 同 應急藥品類)
再用ent 黎儲起呢個value
new ent=GetPlayerWeaponSlot(client, slot);
有左呢個value就可以逐一查出呢把主武既相應參數了
第1樣:
複製內容到剪貼板
代碼:
upgradeBit = GetEntProp(ent, Prop_Send, "m_upgradeBitVec");
m_upgradeBitVec 武器有冇附加升級, 雖然我冇實際睇過個數值係乜
不過我估應該得2個可能 1 或者 0 , 即係有 或者 冇.
第2樣:
複製內容到剪貼板
代碼:
upammo = GetEntProp(ent, Prop_Send, "m_nUpgradedPrimaryAmmoLoaded");
m_nUpgradedPrimaryAmmoLoaded 武器特殊彈藥(即白磷彈/沖擊彈)上膛彈量
第3樣:
複製內容到剪貼板
代碼:
clip = GetEntProp(ent, Prop_Send, "m_iClip1");
m_iClip1 武器上膛彈量
第4樣:
複製內容到剪貼板
代碼:
new ammoOffset = FindSendPropInfo("CTerrorPlayer", "m_iAmmo");GetEdictClassname(ent, weapon, 32); if (StrEqual(weapon, "weapon_rifle") || StrEqual(weapon, "weapon_rifle_sg552") || StrEqual(weapon, "weapon_rifle_desert") || StrEqual(weapon, "weapon_rifle_ak47")) { ammo = GetEntData(client, ammoOffset+(12)); } else if (StrEqual(weapon, "weapon_rifle_m60") ) { ammo = GetEntData(client, ammoOffset+(12)); } else if .....
呢個係指備彈數量, 由於不同武器備彈數量不同
所以要先用ammoOffset 黎保存基本m_iAmmo即儲存位置
再因應唔同種類武器加減ammoOffset 既位置
以成功獲取該武器既正確備彈數量
例子:
當你手上既武器係M16咁通過weapon name checking:
if (StrEqual(weapon, "weapon_rifle") || StrEqual(weapon, "weapon_rifle_sg552") || StrEqual(weapon, "weapon_rifle_desert") || StrEqual(weapon, "weapon_rifle_ak47"))
得出佢所屬武器既備彈類別後
就可以將佢ammoOffset 既位置 +(12)
取得備彈數量正確儲存位置後
再讀取佢既備彈數量
ammo = GetEntData(client, ammoOffset+(12));
以上4樣就係最常用既基本槍械參數了
下回會講點修改呢D參數
不過大部份只需要將get改做set就可以進行修改, 我只會略略咁講下比較複雜既例子
[
本帖最後由 leo221094 於 2011-9-17 13:01 編輯 ]