Bu olayda Reapi kütüphanesini kullanacağız.
PHP Kod:
#include <amxmodx>
#include <reapi>
//Silahımıza bir değer atıyoruz. Bu şekilde bu değeri kontrol edip silaha model yüklüyoruz.
//Herhangi bir değer atayabilirsiniz.
new const WeaponUid = 1337;
public plugin_init() {
//Silahı elimize aldığımızda modelini ayarlamak için DefaultDeploy komutunu kullanıyoruz. (post false olmalı)
RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy, "CBasePlayerWeapon_DefaultDeploy_Pre", .post = false);
//Silahı yere attığımızda modelini ayarlamak için SetModel komutunu kullanıyoruz. (post false olmalı)
RegisterHookChain(RG_CWeaponBox_SetModel, "CWeaponBox_SetModel_Pre", .post = false);
}
public SkinliSilahVer(pPlayer) {
//Eğer sadece modelini değiştirecekseniz bir değere ihtiyaç yok.
rg_give_custom_item(pPlayer, "weapon_deagle", GT_REPLACE, WeaponUid);
// Birinci değer oyuncu indeksi
// İkinci değer silahın ismi
// Üçüncü değer silahı verdiğinde olacak olay [Aşağıda değerler bulunmakta]
// Dördüncü değer silaha özgün bir değer
// [-- Üçüncü değer örnekleri --];
// GT_APPEND - Sadece itemi verir
// GT_REPLACE - İtemi verir ve o slottaki bütün silahları siler.
// GT_DROP_AND_REPLACE - İtemi verir ve o slottaki bütün silahları yere atar (drop)
//Eğer silaha değer atayacaksanız bir değer oluşturmanız gerek (örneğin tek tek sıkan deagle gibi)
new iWeapon = rg_give_custom_item(pPlayer, "weapon_deagle", GT_REPLACE, WeaponUid);
//Her mermi sıktığında reload atma olayını burada ayarlıyoruz. Maksimum mermi sayısını 1 ayarladık.
//Burada silaha istediğiniz ayarı yapabilirsiniz. Reapi bunun için bayağı gelişmiş bir kütüphane.
set_member(iWeapon, m_Weapon_iClip, 1);
rg_set_iteminfo(iWeapon, ItemInfo_iMaxClip, 1);
}
public CBasePlayerWeapon_DefaultDeploy_Pre(const iWeapon, szViewModel[], szWeaponModel[], iAnim, szAnimExt[], skiplocal) {
//Burada silahımızın özgün değerlerinin eşit olup olmadığını kontrol ediyoruz.
if(get_entvar(iWeapon, var_impulse) == WeaponUid) {
//v modelini değiştirir.
SetHookChainArg(2, ATYPE_STRING, "models/v_deagle.mdl");
//p modelini değiştirir
SetHookChainArg(3, ATYPE_STRING, "models/p_deagle.mdl");
}
//Eğer birden fazla silahınız varsa silahın özgün değerini switch ile alabilirsiniz.
new iImpulse = get_entvar(iWeapon, var_impulse);
switch(iImpulse) {
case WeaponUid: {
//
}
case ... {
//diger özgün sayılar vs.
}
}
}
public CWeaponBox_SetModel_Pre(const iWeaponBox, const szModelName[]) {
//Öncelikle silahın hangi silah olduğunu değere atıyoruz.
new iWeapon = GetWeaponBoxWeapon(iWeaponBox);
//Değer -1 olarak yani hiçbir silah olarak çıkabiliyor. Bu yüzden NULLENT yani (-1) kontrolü yapıyoruz.
if(iWeapon == NULLENT) {
return;
}
//Şimdi silahın ne olduğunu ve özgün değerini alabiliriz.
//Tek bir silah yapıyorsanız direkt özgün değeri kontrol edin.
if(get_entvar(iWeapon, var_impulse) == WeaponUid) {
//Bu komut silahın yerdeki modelini ayarlar.
SetHookChainArg(2, ATYPE_STRING, "models/w_deagle.mdl");
}
//Eğer birden fazla silahınız varsa silahın özgün değerini switch ile alabilirsiniz.
new iImpulse = get_entvar(iWeapon, var_impulse);
switch(iImpulse) {
case WeaponUid: {
//
}
case ... {
//diger özgün sayılar vs.
}
}
}
//Yerdeki silahın kontrolünü yapmak için bunu kullanmalısınız.
//Burada değiştirmeniz gereken bir yer yok. Direkt kullanabilirsiniz.
//Direkt kopyalayabilmeniz için burada anlatacağım
//Döngüde maksimum slot sayısı kadar dönüyor. (slotlar sıfırdan başlıyor, 0-1-2-3-4-5)
//Ardından get_member ile var olduğu slottan silahın değerini çekiyor.
//Silahın varlığını kontrol ediyor. Eğer silahın değeri sıfırdan büyükse silahı çekiyor.
//Değilse NULLENT yani -1 olarak çekiyor.
GetWeaponBoxWeapon(const iWeaponBox) {
for(new i = 0, iWeapon; i < MAX_ITEM_TYPES; i++) {
iWeapon = get_member(iWeaponBox, m_WeaponBox_rgpPlayerItems, i);
if(!is_nullent(iWeapon)) {
return iWeapon;
}
}
return NULLENT;
}
)

