F.T.H yazdı: Cmt Ağu 10, 2019 10:12 pm
Reapi temiz yazılmış versiyon olduğu doğrudur tek bir kodla falan mı çalıştığını sanıyorsun onun.
Modül olarak ReHLDS & ReGameDLL kullanıldığı için reapi ile yazılmış kodlar daha hızlı çalışır. Tek bir kodla falan mı sanıyorsun demene çok güldüm. Uzun süredir araştırma yapıyorum, kodların nasıl daha iyi çalıştığı hakkında.
Bu reapi;
Kod: Tümünü seç
cell AMX_NATIVE_CALL rg_remove_item(AMX *amx, cell *params)
{
enum args_e { arg_count, arg_index, arg_item_name, arg_remammo };
CHECK_ISPLAYER(arg_index);
CBasePlayer *pPlayer = UTIL_PlayerByIndex(params[arg_index]);
CHECK_CONNECTED(pPlayer, arg_index);
char iname[256];
const char* pszItemName = getAmxString(amx, params[arg_item_name], iname);
if (pPlayer->CSPlayer()->RemovePlayerItemEx(pszItemName, params[arg_remammo] != 0)) {
return TRUE;
}
return FALSE;
}
Bu da senin kullandığın komut; [ham_strip_weapon]
Kod: Tümünü seç
static cell AMX_NATIVE_CALL get_weaponid(AMX *amx, cell *params)
{
int ilen;
const char *name = get_amxstring(amx, params[1], 0, ilen);
for (int i = 1; i < MAX_WEAPONS; i++)
{
if (!strcmp(g_weaponsData[i].fullName.chars(), name))
return g_weaponsData[i].iId;
}
return 0;
}
/* BURAYI KISALTTIM SENIN ICIN SADECE SENIN KULLANDIGIN YER */
static cell AMX_NATIVE_CALL engfunc(AMX *amx, cell *params)
{
// Variables I will need throughout all the different calls.
int type = params[1];
// LOG_CONSOLE(PLID,"Called: %i %i",type,*params/sizeof(cell));
int len;
char *temp;
char *temp2;
char *temp3;
cell *cRet;
vec3_t Vec1;
vec3_t Vec2;
vec3_t Vec3;
vec3_t Vec4;
int iparam1;
int iparam2;
int iparam3;
int iparam4;
int iparam5;
int iparam6;
float fparam1;
float fparam2;
float fparam3;
// float fTemp[3];
int index;
unsigned char *pset;
edict_t *pRet=NULL;
// Now start calling.. :/
switch (type)
{
// pfnFindEntityByString
case EngFunc_FindEntityByString: // edict) (edict_t *pEdictStartSearchAfter, const char *pszField, const char *pszValue);
cRet = MF_GetAmxAddr(amx,params[2]);
index=cRet[0];
temp = MF_GetAmxString(amx,params[3],0,&len);
temp2 = MF_GetAmxString(amx,params[4],1,&len);
pRet = (*g_engfuncs.pfnFindEntityByString)(index == -1 ? NULL : TypeConversion.id_to_edict(index),temp,temp2);
if (pRet)
return ENTINDEX(pRet);
return -1;
}
}
static cell AMX_NATIVE_CALL get_user_weapon(AMX *amx, cell *params) /* 3 param */
{
int index = params[1];
if (index < 1 || index > gpGlobals->maxClients)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid player id %d", index);
return 0;
}
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
if (pPlayer->ingame)
{
int wpn = pPlayer->current;
cell *cpTemp = get_amxaddr(amx, params[2]);
*cpTemp = pPlayer->weapons[wpn].clip;
cpTemp = get_amxaddr(amx, params[3]);
*cpTemp = pPlayer->weapons[wpn].ammo;
return wpn;
}
return 0;
}
daha
ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
ExecuteHamB(Ham_Item_Kill,wEnt);
set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
bu komutlar vardı yeterli olduğu için eklemedim. Umarım anlamışsındır.