Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
Don Corleone » 26 авг 2017, 19:07
Здравствуйте, нужна ваша помощь, из за csdm lite, другим плагином гранаты выдаются, но их нельзя взять, в коде искал и что то не нашел из за чего нельзя взять гранаты, помогите, благодарю)
- Код: Выделить всё
new g_active = true
const m_iAccount = 115
const m_iAccount = 140
const m_iHideHUD = 361
const m_pActiveItem = 373
const XO_PLAYER = 5
const HIDE_TIMER = 1<<4
const HIDE_MONEY = 1<<5
const PDATA_SAFE = 2
new g_Protected[MAX_PLAYERS+1]
new g_bSave[MAX_PLAYERS+1]
new g_ipPreviousWeapons[MAX_PLAYERS+1]
new g_isPreviousWeapons[MAX_PLAYERS+1]
new bool:g_isBot[MAX_PLAYERS+1]
new bool:g_bAlive[MAX_PLAYERS+1]
new Float:spawns[MAX_SPAWNS][9]
new Array:g_PrimaryWeapons, Array:g_SecondaryWeapons
new g_bConnected, g_iMaxPlayers, roundEnded
new g_spawn_random, spawnCount, csdmSpawnCount
new g_SpawnMenu, g_pWeaponMenu, g_sWeaponMenu
new g_iFMSetModel, HamHook:g_iFwdPlayerSpawn
new g_msgMoney, g_msgCorpse, g_msgDeath
const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
const PRIMARY_WEAPONS_BIT_SUM = 1<<CSW_SCOUT|1<<CSW_XM1014|1<<CSW_MAC10|1<<CSW_AUG|1<<CSW_UMP45
|1<<CSW_SG550|1<<CSW_GALIL|1<<CSW_FAMAS|1<<CSW_AWP|1<<CSW_MP5NAVY|1<<CSW_M249|1<<CSW_M3
|1<<CSW_M4A1|1<<CSW_TMP|1<<CSW_G3SG1|1<<CSW_SG552|1<<CSW_AK47|1<<CSW_P90
const SECONDARY_WEAPONS_BIT_SUM = 1<<CSW_P228|1<<CSW_ELITE|1<<CSW_FIVESEVEN|1<<CSW_USP|1<<CSW_GLOCK18|1<<CSW_DEAGLE
new const g_iMaxClip[CSW_P90+1] = { -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30, 20, 25, 30,
35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50
}
new g_WeaponSlots[] = { 0, 2, 0, 1, 4, 1, 5, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3, 1
}
enum _:CHOICES {
OPTION_NONE,
OPTION_NEW,
OPTION_OLD,
OPTION_SAVE
}
new const g_szOptions[CHOICES][] =
{
"None", "Выбрать оружие", "Пред. выбор", "2 + Не показывать меню больше"
}
public plugin_init()
{
register_plugin("CSDM Lite", "0.0.1b", "Vaqtincha")
init_spawns()
CreateWeaponsArray()
g_iMaxPlayers = get_maxplayers()
g_spawn_random = register_cvar("spawn_random", "1")
register_concmd("csdm_enable", "cmdset", ADMIN_CFG)
register_clcmd("joinclass", "cmd_JoinClass")
register_clcmd("buyequip", "block_buy")
register_clcmd("buy", "block_buy")
register_clcmd("say /guns", "cmdGuns")
register_clcmd("say guns", "cmdGuns")
register_clcmd("say_team /guns", "cmdGuns")
register_clcmd("say_team guns", "cmdGuns")
register_menucmd(register_menuid("Terrorist_Select",1),511,"cmd_JoinClass") register_menucmd(register_menuid("CT_Select",1),511,"cmd_JoinClass")
register_event("ResetHUD", "onResetHUD", "b")
register_event("HLTV","Event_NewRound","a","1=0","2=0")
register_event("TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
register_event("StatusIcon", "event_buyzone_icon", "b", "2=buyzone")
register_logevent("logevent_round_end",2,"1=Round_End")
g_msgCorpse = register_message(get_user_msgid("ClCorpse"),"message_clcorpse")
g_msgMoney = register_message(get_user_msgid("Money"),"message_money")
g_msgDeath = register_message(get_user_msgid("DeathMsg"),"message_death")
g_SpawnMenu = menu_create("Меню оружия", "HandleSpawnMenu")
new szNum[3]
for(new i = 1; i < sizeof(g_szOptions); i++)
{
num_to_str(i, szNum, charsmax(szNum));
menu_additem(g_SpawnMenu, g_szOptions[i], szNum, 0)
}
menu_setprop(g_SpawnMenu , MPROP_EXIT , MEXIT_NEVER)
EnableHamForward(g_iFwdPlayerSpawn = RegisterHam(Ham_Spawn, "player", "Player_Spawn_Post", 1))
g_iFMSetModel = register_forward(FM_SetModel, "SetModelPre", 0 )
}
public cmdset(id, level)
{
if(!(get_user_flags(id) & level))
{
return PLUGIN_HANDLED
}
new arg[8]
read_argv(1, arg, charsmax(arg))
if((equali(arg, "on")) || (equali(arg, "1")))
{
if(g_active)
{
PrintChat(id, "^4[CSDM] ^1DeathMatch Mode Already ENABLED.")
return PLUGIN_HANDLED
}
g_active = true
g_iFMSetModel = register_forward(FM_SetModel, "SetModelPre", 0 )
g_msgMoney = register_message(get_user_msgid("Money"), "message_money")
g_msgCorpse = register_message(get_user_msgid("ClCorpse"),"message_clcorpse")
g_msgDeath = register_message(get_user_msgid("DeathMsg"),"message_death")
EnableHamForward(g_iFwdPlayerSpawn)
PrintChat(id, "^4[CSDM] ^1DeathMatch Mode ENABLED.")
server_cmd("sv_restartround 1")
}
if((equali(arg, "off")) || (equali(arg, "0")))
{
if(!g_active)
{
PrintChat(id, "^4[CSDM] ^1DeathMatch Mode Not ENABLED.")
return PLUGIN_HANDLED
}
g_active = false
unregister_forward(FM_SetModel, g_iFMSetModel, 0)
unregister_message(get_user_msgid("Money"), g_msgMoney)
unregister_message(get_user_msgid("ClCorpse"), g_msgCorpse)
unregister_message(get_user_msgid("DeathMsg"), g_msgDeath)
DisableHamForward(g_iFwdPlayerSpawn)
PrintChat(id, "^4[CSDM] ^1DeathMatch Mode DISABLED.")
server_cmd("sv_restartround 1")
}
return PLUGIN_HANDLED
}
public client_putinserver(id)
{
g_ipPreviousWeapons[id] = 0
g_isPreviousWeapons[id] = 0
g_Protected[id] = 0
g_bSave[id] = false
g_bAlive[id] = false
if(is_user_bot(id))
{
respawn(id)
g_isBot[id] = true
}
if(!is_user_hltv(id))
SetFlagConnected(id)
if( pev_valid(id) == PDATA_SAFE && g_active)
{
set_pdata_int( id, m_iHideHUD, get_pdata_int(id, m_iHideHUD ) |HIDE_MONEY|HIDE_TIMER)
}
}
public client_disconnect(id)
{
if(g_Protected[id])
{
remove_task(g_Protected[id])
g_Protected[id] = 0
}
if(task_exists(TASK_RESPAWN+id))
{
remove_task(TASK_RESPAWN+id)
}
g_isBot[id] = false
ClearFlagConnected(id)
}
public logevent_round_end() roundEnded = 1
public Event_NewRound() roundEnded = 0
public Event_NewGame()
{
new iPlayers[32], iNum, id
get_players(iPlayers, iNum )
for ( --iNum; iNum >= 0; --iNum )
{
id = iPlayers[iNum]
if(g_Protected[id])
{
remove_task(g_Protected[id])
g_Protected[id] = 0
fm_set_rendering(id)
}
if(task_exists(TASK_RESPAWN+id))
{
remove_task(TASK_RESPAWN+id)
}
}
}
public onResetHUD(id)
{
if(g_active)
{
set_pdata_int(id, m_iHideHUD, get_pdata_int(id, m_iHideHUD ) |HIDE_MONEY|HIDE_TIMER)
}
}
public Player_Spawn_Post(id)
{
if(g_active)
{
set_task(0.1, "spawn_showmenu", id)
}
g_bAlive[id] = bool:is_user_alive(id)
}
public message_death(msg_id, msg_dest, msg_entity)
{
if(!g_active || roundEnded)
return
new killer = get_msg_arg_int(1)
new victim = get_msg_arg_int(2)
g_bAlive[victim] = false
set_task(0.1, "delayrespawn", victim)
if(IsPlayer(killer) && victim != killer
&& g_bAlive[killer] && !g_isBot[killer])
{
new iActiveWeapon = get_user_active_weapon(killer)
if(iActiveWeapon > 0)
{
new iId = cs_get_weapon_id(iActiveWeapon)
if(!(NOCLIP_WPN_BS & (1<<iId)))
{
cs_set_weapon_ammo(iActiveWeapon, g_iMaxClip[iId])
client_cmd(killer, "spk ^"items/9mmclip1.wav^"")
}
}
}
}
public spawn_showmenu(id)
{
if(g_bAlive[id] && g_active)
{
strip_weapons(id, 0)
ham_give_weapon(id, "weapon_knife")
if(!g_isBot[id])
{
if(g_bSave[id])
{
PreviousWeapons(id)
}else{
menu_display(id, g_SpawnMenu)
}
}else{
new iPrimaryWeapon = random_num(0, ArraySize(g_PrimaryWeapons)-1);
new iSecondaryWeapon = random_num(0, ArraySize(g_SecondaryWeapons)-1);
for(new i=0; i< 2; i++)
{
new WeaponName[32], szArrayData[32]
if(i == 0)
{
ArrayGetString(g_PrimaryWeapons, iPrimaryWeapon, szArrayData, charsmax(szArrayData))
}else{
ArrayGetString(g_SecondaryWeapons, iSecondaryWeapon, szArrayData, charsmax(szArrayData))
}
replace_all(szArrayData, charsmax(szArrayData), " ", "")
format(WeaponName, charsmax(WeaponName), "weapon_%s", szArrayData)
strtolower(WeaponName)
ham_give_weapon(id, WeaponName)
}
}
}
}
public CreateWeaponsArray()
{
new g_szWepFile[256], g_FilePointer
get_localinfo("amxx_configsdir", g_szWepFile, charsmax(g_szWepFile))
format(g_szWepFile, charsmax(g_szWepFile), "%s/csdm_weapons.ini", g_szWepFile); g_FilePointer = fopen(g_szWepFile, "r")
g_PrimaryWeapons = ArrayCreate(15)
g_SecondaryWeapons = ArrayCreate(15)
g_pWeaponMenu = menu_create("Основное оружие", "HandlePrimaryWeapons"); g_sWeaponMenu = menu_create("Вспомогательное оружие", "HandleSecondaryWeapons");
new szData[32], szWeaponName[32], szpNum[3], szsNum[3];
new pCounter, sCounter
if(g_FilePointer)
{
while(!feof(g_FilePointer))
{
fgets(g_FilePointer, szData, charsmax(szData))
trim(szData)
if(containi(szData, ";") != -1)
continue
copy(szWeaponName, charsmax(szWeaponName), szData)
replace_all(szWeaponName, charsmax(szWeaponName), " ", "")
format(szWeaponName, charsmax(szWeaponName), "weapon_%s", szWeaponName)
strtolower(szWeaponName)
new iWeaponID = get_weaponid(szWeaponName)
switch(g_WeaponSlots[iWeaponID])
{
case 1:
{
ArrayPushString(g_PrimaryWeapons, szData)
num_to_str(pCounter, szpNum, charsmax(szpNum))
menu_additem(g_pWeaponMenu, szData, szpNum, 0)
++pCounter
}
case 2:
{
ArrayPushString(g_SecondaryWeapons, szData)
num_to_str(sCounter, szsNum, charsmax(szsNum))
menu_additem(g_sWeaponMenu, szData, szsNum, 0)
++sCounter
}
}
}
}
else
{
set_fail_state("Failed to Open Weapons List")
}
menu_setprop(g_pWeaponMenu , MPROP_EXIT , MEXIT_NEVER)
menu_setprop(g_sWeaponMenu , MPROP_EXIT , MEXIT_NEVER)
fclose(g_FilePointer)
}
public HandleSpawnMenu(id, iMenu, iItem)
{
new szKey[3], Dummy
menu_item_getinfo(iMenu, iItem, Dummy, szKey, 2, "", 0, Dummy)
switch(str_to_num(szKey))
{
case OPTION_NEW:
{
menu_display(id, g_pWeaponMenu)
}
case OPTION_OLD:
{
PreviousWeapons(id)
}
case OPTION_SAVE:
{
PreviousWeapons(id)
g_bSave[id] = true
PrintChat(id, "^4[CSDM] ^1say /guns to re-enable the gun menu.")
}
}
return PLUGIN_CONTINUE
}
public HandlePrimaryWeapons(id, iMenu, iItem)
{
if(!g_bAlive[id] || !g_active)
return
new szKey[3], iSelectedWeapon, Dummy
menu_item_getinfo(iMenu, iItem, Dummy, szKey, 2, "", 0, Dummy)
iSelectedWeapon = str_to_num(szKey)
g_ipPreviousWeapons[id] = iSelectedWeapon
new WeaponName[32], szArrayData[32]
ArrayGetString(g_PrimaryWeapons, iSelectedWeapon, szArrayData, charsmax(szArrayData))
replace_all(szArrayData, charsmax(szArrayData), " ", "")
format(WeaponName, charsmax(WeaponName), "weapon_%s", szArrayData)
strtolower(WeaponName)
strip_weapons(id, 1)
ham_give_weapon(id, WeaponName)
menu_display(id, g_sWeaponMenu)
}
public HandleSecondaryWeapons(id, iMenu, iItem)
{
if(!g_bAlive[id] || !g_active)
return
new szKey[3], iSelectedWeapon, Dummy
menu_item_getinfo(iMenu, iItem, Dummy, szKey, 2, "", 0, Dummy)
iSelectedWeapon = str_to_num(szKey)
g_isPreviousWeapons[id] = iSelectedWeapon
new WeaponName[32], szArrayData[32]
ArrayGetString(g_SecondaryWeapons, iSelectedWeapon, szArrayData, charsmax(szArrayData))
replace_all(szArrayData, charsmax(szArrayData), " ", "")
format(WeaponName, charsmax(WeaponName), "weapon_%s", szArrayData)
strtolower(WeaponName)
strip_weapons(id, 2)
ham_give_weapon(id, WeaponName)
}
public PreviousWeapons(id)
{
if(!g_bAlive[id] || !g_active)
return
new szpData[32], szsData[32];
ArrayGetString(g_PrimaryWeapons, g_ipPreviousWeapons[id], szpData, charsmax(szpData))
ArrayGetString(g_SecondaryWeapons, g_isPreviousWeapons[id], szsData, charsmax(szsData))
strtolower(szpData)
strtolower(szsData)
replace_all(szsData, charsmax(szsData), " ", "")
replace_all(szpData, charsmax(szpData), " ", "")
format(szsData, charsmax(szsData), "weapon_%s", szsData)
format(szpData, charsmax(szpData), "weapon_%s", szpData)
strip_weapons(id, 1)
ham_give_weapon(id, szpData)
strip_weapons(id, 2)
ham_give_weapon(id, szsData)
}
public SetModelPre( const ent, const model[])
{
if(!pev_valid(ent) || !g_active)
return FMRES_IGNORED
static const szWpnboxClass[] = "weaponbox"
static szClassName[10]
pev(ent, pev_classname, szClassName, charsmax(szClassName))
if( !strcmp( szClassName, szWpnboxClass ))
{
set_pev(ent, pev_flags, FL_KILLME)
}
return FMRES_IGNORED
}
public message_clcorpse(msg_id, msg_dest, msg_entity)
{
return g_active ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}
public message_money(msg_id, msg_dest, msg_entity)
{
if(!g_active || !IsUserConnected(msg_entity))
return PLUGIN_CONTINUE
set_msg_arg_int(1,ARG_LONG,0) set_msg_arg_int(2,ARG_BYTE,0)
set_pdata_int(msg_entity, m_iAccount, 0, XO_PLAYER)
return PLUGIN_CONTINUE
}
public event_buyzone_icon(id)
{
if(g_active)
{
message_begin(MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id)
write_byte(0)
write_string("buyzone")
write_byte(0)
write_byte(255)
write_byte(0)
message_end()
}
}
public block_buy(id)
{
return g_active ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}
public cmd_JoinClass(id)
{
if(g_active)
delayrespawn(id)
}
public cmdGuns(id)
{
if(g_active && g_bSave[id])
{
g_bSave[id] = false
PrintChat(id, "^4[CSDM] ^1Gun menu will be re-enabled next spawn.")
}
}
public delayrespawn(id)
{
if(!g_active || !on_valid_team(id)
|| roundEnded || task_exists(TASK_RESPAWN+id))
return
set_task(SPAWN_WAIT_TIME, "respawn", TASK_RESPAWN+id)
}
public respawn(taskid)
{
new id = taskid-TASK_RESPAWN
if(!g_active || !IsUserConnected(id) || roundEnded || g_bAlive[id])
return
ExecuteHamB(Ham_CS_RoundRespawn, id)
if(get_pcvar_num(g_spawn_random))
{
do_random_spawn(id)
}
SetProtection(id)
}
SetProtection(id)
{
if(g_Protected[id] || !IsUserConnected(id))
remove_task(g_Protected[id])
set_task(PROTECTION_TIME, "ProtectionOver", id)
g_Protected[id] = id
switch( get_user_team(id))
{
case 1: fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 1)
case 2: fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 1)
}
set_pev(id, pev_takedamage, 0.0)
}
public ProtectionOver(id)
{
g_Protected[id] = 0
if (!IsUserConnected(id))
return
fm_set_rendering(id)
set_pev(id, pev_takedamage, 2.0)
}
do_random_spawn(id)
{
if(!g_bAlive[id]) return
if(spawnCount <= 0 || !csdmSpawnCount) return
static Float:vecHolder[3]
new sp_index = random_num(0,spawnCount-1)
vecHolder[0] = spawns[sp_index][0];
vecHolder[1] = spawns[sp_index][1];
vecHolder[2] = spawns[sp_index][2];
if(!is_hull_vacant(vecHolder,HULL_HUMAN) && spawnCount > 1)
{
new i;
for(i=0;i<3;i++)
{
sp_index = random_num(0,spawnCount-1);
vecHolder[0] = spawns[sp_index][0];
vecHolder[1] = spawns[sp_index][1];
vecHolder[2] = spawns[sp_index][2];
if(is_hull_vacant(vecHolder,HULL_HUMAN)) break;
}
if(i == 3)
{
for(i=sp_index+1;i!=sp_index;i++)
{
if(i >= spawnCount) i = 0;
vecHolder[0] = spawns[i][0];
vecHolder[1] = spawns[i][1];
vecHolder[2] = spawns[i][2];
if(is_hull_vacant(vecHolder,HULL_HUMAN))
{
sp_index = i;
break;
}
}
}
}
vecHolder[0] = spawns[sp_index][0];
vecHolder[1] = spawns[sp_index][1];
vecHolder[2] = spawns[sp_index][2];
engfunc(EngFunc_SetOrigin,id,vecHolder);
vecHolder[0] = spawns[sp_index][3];
vecHolder[1] = spawns[sp_index][4];
vecHolder[2] = spawns[sp_index][5];
set_pev(id,pev_angles,vecHolder);
vecHolder[0] = spawns[sp_index][6];
vecHolder[1] = spawns[sp_index][7];
vecHolder[2] = spawns[sp_index][8];
set_pev(id,pev_v_angle,vecHolder);
set_pev(id,pev_fixangle,1);
}
init_spawns()
{
new mapName[32], csdmFile[64], lineData[64],cfgDir[32];
get_localinfo("amxx_configsdir", cfgDir, charsmax(cfgDir))
get_mapname(mapName,charsmax(mapName));
formatex(csdmFile, charsmax(csdmFile),"%s/csdm/%s.spawns.cfg",cfgDir,mapName);
if(file_exists(csdmFile))
{
new csdmData[10][6];
new file = fopen(csdmFile,"rt");
while(file && !feof(file))
{
fgets(file,lineData,charsmax(lineData));
if(!lineData[0] || str_count(lineData,' ') < 2)
continue;
parse(lineData,csdmData[0],5,csdmData[1],5,csdmData[2],5,csdmData[3],5,csdmData[4],5,csdmData[5],5,csdmData[6],5,csdmData[7],5,csdmData[8],5,csdmData[9],5);
spawns[spawnCount][0] = floatstr(csdmData[0]);
spawns[spawnCount][1] = floatstr(csdmData[1]);
spawns[spawnCount][2] = floatstr(csdmData[2]);
spawns[spawnCount][3] = floatstr(csdmData[3]);
spawns[spawnCount][4] = floatstr(csdmData[4]);
spawns[spawnCount][5] = floatstr(csdmData[5]);
spawns[spawnCount][6] = floatstr(csdmData[7]);
spawns[spawnCount][7] = floatstr(csdmData[8]);
spawns[spawnCount][8] = floatstr(csdmData[9]);
spawnCount++;
csdmSpawnCount++;
if(spawnCount >= MAX_SPAWNS) break;
}
if(file) fclose(file);
}
else
{
collect_spawns("info_player_deathmatch");
collect_spawns("info_player_start");
}
}
collect_spawns(classname[])
{
new ent = g_iMaxPlayers, Float:spawnData[3];
while((ent = fm_find_ent_by_class(ent, classname)))
{
pev(ent,pev_origin,spawnData);
spawns[spawnCount][0] = spawnData[0];
spawns[spawnCount][1] = spawnData[1];
spawns[spawnCount][2] = spawnData[2];
pev(ent,pev_angles,spawnData);
spawns[spawnCount][3] = spawnData[0];
spawns[spawnCount][4] = spawnData[1];
spawns[spawnCount][5] = spawnData[2];
spawns[spawnCount][6] = spawnData[0];
spawns[spawnCount][7] = spawnData[1];
spawns[spawnCount][8] = spawnData[2];
spawnCount++;
if(spawnCount >= MAX_SPAWNS) break;
}
}
stock str_count(str[], searchchar)
{
new i = 0;
new maxlen = strlen(str);
new count = 0;
for(i=0;i<=maxlen;i++)
{
if(str[i] == searchchar)
count++;
}
return count;
}
stock bool:is_hull_vacant(const Float:origin[3],hull)
{
new tr = 0;
engfunc(EngFunc_TraceHull,origin,origin,0,hull,0,tr);
if(!get_tr2(tr,TR_StartSolid) && !get_tr2(tr,TR_AllSolid) && get_tr2(tr,TR_InOpen))
return true;
return false;
}
stock ham_give_weapon(id, weapon[])
{
if(!equal(weapon, "weapon_",7)) return 0
new wEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon))
if(!pev_valid(wEnt)) return 0
set_pev(wEnt,pev_spawnflags, SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, wEnt)
if(!ExecuteHamB(Ham_AddPlayerItem, id, any:wEnt))
{
if(pev_valid(wEnt)) set_pev(wEnt, pev_flags, pev(wEnt, pev_flags) | FL_KILLME)
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer, wEnt, any:id)
if(!equal(weapon, "weapon_knife",12))
{
new iWeaponId = get_weaponid(weapon)
cs_set_user_bpammo(id, iWeaponId, 200)
}
return wEnt
}
stock ham_strip_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0
new wId = get_weaponid(weapon)
if(!wId) return 0
new wEnt
while((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}
if(!wEnt) return 0
new iTmp
if(get_user_weapon(id, iTmp, iTmp) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
if(!ExecuteHamB(Ham_RemovePlayerItem, id, any:wEnt)) return 0
ExecuteHamB(Ham_Item_Kill, wEnt)
set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId))
return 1
}
stock strip_weapons(id, slot)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++)
{
weaponid = weapons[i]
static wname[32]
get_weaponname(weaponid, wname, charsmax(wname))
if(slot == 0) ham_strip_weapon(id, wname)
else if((slot == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
|| (slot == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
{
ham_strip_weapon(id, wname)
}
}
}
on_valid_team(id)
{
new CsTeams:team = cs_get_user_team(id);
return (team == CS_TEAM_T || team == CS_TEAM_CT);
}
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
new Float:RenderColor[3];
RenderColor[0] = float(r);
RenderColor[1] = float(g);
RenderColor[2] = float(b);
set_pev(entity, pev_renderfx, fx);
set_pev(entity, pev_rendercolor, RenderColor);
set_pev(entity, pev_rendermode, render);
set_pev(entity, pev_renderamt, float(amount));
return 1;
}
PrintChat(const iReceiver, const Msg[])
{
if(IsUserConnected(iReceiver))
{
message_begin(MSG_ONE, 76, .player=iReceiver)
write_byte(iReceiver)
write_string(Msg)
message_end()
}
}
-
Don Corleone
-
- Сообщения: 79
- Зарегистрирован: 23 окт 2016, 16:13
- Благодарил (а): 5 раз.
- Поблагодарили: 0 раз.
- Опыт программирования: Около 3 месяцев
- Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11