1. sayfa (Toplam 1 sayfa)
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 8:23 pm
gönderen OPC Line
Merhaba arkadaşlar bir pluginle yakından ilgileniyorum. Ama şunu çözemedim. Mesela bir özelliği tüm silahlara vermeyi nasıl yapailirim. Örnek bir eklentide olabilir veya ufak bir kesitte olabilir paylaşabilir misiniz ?
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 9:30 pm
gönderen Aconyonn
bir özelliği tüm silahlara verirsen buga sokabilirsin(model vermek, hasar vermek vb.) ve detayıyla ilgilenmen gerekir.
örnek basit anlatımda bulundum,
Kod: Tümünü seç
#pragma semicolon 1
#include <amxmodx>
#include <reapi>
public plugin_init(){
RegisterHookChain(RG_CBasePlayer_TakeDamage,"@rTakeDamage",.post=true);
}
@rTakeDamage(const this, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType){
#pragma unused pevInflictor,bitsDamageType
if(!is_user_connected(this) || !is_user_alive(this)){
return;
}
new wid=get_user_weapon(pevAttacker);
/**
Silahi kontrol ettirmek icin suanki silah nedir fonksiyonunu tanitiyoruz
**/
if(wid==CSW_M4A1){
SetHookChainArg(4,ATYPE_FLOAT,flDamage*2.0);
/**
if döngüsüyle "eğer silahımız m4a1'e eşitse" işlem yaptır diyoruz.
ve
M4a1 silahinin verdigi default hasari 2.0 ile carptirdik.
**/
}
}
lazım olabilecek tanımlamalar ve fonksiyonlar,
https://dev-cs.ru/amxx/amxmodx/get_user_weapon/view
https://dev-cs.ru/amxx/cstrike_const/inc
CSW ID'leri:
https://dev-cs.ru/amxx/cstrike_const/inc
https://dev-cs.ru/amxx/reapi/SetHookChainArg/view
https://dev-cs.ru/amxx/reapi/inc#413
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 10:43 pm
gönderen Colditz
Bu şekilde silahlara değişik özellik verebilirsiniz. Bunu Spawn yerine AddPlayerItem komutunda da uygulayabilirsiniz.
Kod: Tümünü seç
#include <amxmodx>
#include <reapi>
public plugin_init() {
RegisterHookChain(RG_CBasePlayer_Spawn, "@CBasePlayer_Spawn", .post = true);
}
@CBasePlayer_Spawn_Post(const pPlayer) {
if(!is_user_alive(pPlayer)) {
return;
}
/* ÖRNEK 1 ----- DEAGLE MERMİSİNİ 1 E SABİTLER ---- HER SIKTIĞINDA RELOAD ATAR */
new pWeapon = rg_give_custom_item(pPlayer, "weapon_deagle");
rg_set_iteminfo(pWeapon, ItemInfo_iMaxClip, 1);
set_member(pWeapon, m_Weapon_iClip, 1);
/* ÖRNEK 2 ----- M4A1 Susturucu Takip/Cikarmasini Engeller. Sadece Susturuculu oynatır*/
new pWeapon = rg_give_custom_item(pPlayer, "weapon_m4a1");
set_member(pWeapon, m_Weapon_flNextSecondaryAttack, 9999.0);
set_member(pWeapon, m_Weapon_bSecondarySilencerOn, true);
}
Birçok silah komutu var. TakeDamage kullanmadan silahın damagesini bu şekilde bile ayarlayabiliyorsunuz.
Kod: Tümünü seç
set_member(weapon, m_Weapon_flBaseDamage, Float:get_member(weapon, m_Weapon_flBaseDamage) * 2.0);
gibi. İsteğin özel bir şey olursa buradan yazabilirsin, yardımcı olacağım.
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 11:02 pm
gönderen OPC Line
Aslında şöyle söyleyim. Bir plugin var. Bir özellik var bunu sadece awp ve scoutta yapıyor ama ben tüm silahlarda yapmasını istiyorum. İlgili kod
Kod: Tümünü seç
if(!theKiller) return PLUGIN_CONTINUE
if(lastweap[theKiller] == CSW_AWP && get_cvar_num("cvar"))
{
}
else if(lastweap[theKiller] == CSW_SCOUT && get_cvar_num("cvar"))
{
}
else
{
return PLUGIN_CONTINUE
}
nasıl yapsam daha iyi olur
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 11:11 pm
gönderen Colditz
Bu arada
@Aconyonn,
Verdiğin komut bloğu yeterli değil. Açıklamasını aşağıda yaptım.
Kod: Tümünü seç
public plugin_init(){
// eğer hook çekip bir şey değiştireceksen false kullanman gerek.
//RegisterHookChain(RG_CBasePlayer_TakeDamage,"@rTakeDamage",.post=true);
RegisterHookChain(RG_CBasePlayer_TakeDamage, "@rTakeDamage", .post=false);
}
@rTakeDamage(const this, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType){
//Buna gerek yok
//#pragma unused pevInflictor,bitsDamageType
//!is_user_alive komutu zaten oyuncunun oyunda olmadığında false oluyor gereksiz komut.
//Ayrıca bunu kontrol etmeye gerek yok. Bunu attacker için kontrol etmen lazım. Çünkü hasarı sadece attacker vermiyor.
//if(!is_user_connected(this) || !is_user_alive(this)){
if(!is_user_alive(pevAttacker)) {
return;
}
//Madem reapi kullanıyoruz bunu düzgün yapmamız gerek.
//Yine get_user_weapon da sıkıntı değil. Bu sadece tavsiye.
//new wid=get_user_weapon(pevAttacker);
new pWeapon = get_member(pevAttacker, m_pActiveItem);
switch(pWeapon) {
case WEAPON_M4A1: {
SetHookChainArg(4, ATYPE_FLOAT, flDamage * 2.0);
}
}
}
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 11:11 pm
gönderen Colditz
Kodun tamamını atsan da yardımcı olsak?
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 11:19 pm
gönderen OPC Line
Ana eklenti bu. Eklenti awp ve scout silahı ile hs atarsanız maxpayne gibi merminin gidişatını izliyor. Ama ben her silahta olsun istiyorum. Aslında yaptım ama eklenti çalışmamaya başladı. Bende ana eklentiyi paylaştım.
Ufak bir kod bloğu isteği
Gönderilme zamanı: Sal Ara 29, 2020 11:20 pm
gönderen OPC Line
Hazır eliniz değmişken REAPI çekebilirseniz daha iyi olur.
Ufak bir kod bloğu isteği
Gönderilme zamanı: Çrş Ara 30, 2020 9:21 am
gönderen bestcore
Colditz yazdı: Sal Ara 29, 2020 11:11 pm
Bu arada @Aconyonn,
Verdiğin komut bloğu yeterli değil. Açıklamasını aşağıda yaptım.
Kod: Tümünü seç
public plugin_init(){
// eğer hook çekip bir şey değiştireceksen false kullanman gerek.
//RegisterHookChain(RG_CBasePlayer_TakeDamage,"@rTakeDamage",.post=true);
RegisterHookChain(RG_CBasePlayer_TakeDamage, "@rTakeDamage", .post=false);
}
@rTakeDamage(const this, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType){
//Buna gerek yok
//#pragma unused pevInflictor,bitsDamageType
//!is_user_alive komutu zaten oyuncunun oyunda olmadığında false oluyor gereksiz komut.
//Ayrıca bunu kontrol etmeye gerek yok. Bunu attacker için kontrol etmen lazım. Çünkü hasarı sadece attacker vermiyor.
//if(!is_user_connected(this) || !is_user_alive(this)){
if(!is_user_alive(pevAttacker)) {
return;
}
//Madem reapi kullanıyoruz bunu düzgün yapmamız gerek.
//Yine get_user_weapon da sıkıntı değil. Bu sadece tavsiye.
//new wid=get_user_weapon(pevAttacker);
new pWeapon = get_member(pevAttacker, m_pActiveItem);
switch(pWeapon) {
case WEAPON_M4A1: {
SetHookChainArg(4, ATYPE_FLOAT, flDamage * 2.0);
}
}
}
Bu pragmalar ne işe yarıyor ve hepsini özellikleriyle gösteren birer var mı? Pragma semicolonu biliyorum da bunları bilmiyorum.
Ufak bir kod bloğu isteği
Gönderilme zamanı: Çrş Ara 30, 2020 9:28 am
gönderen Colditz