[STOCK] give_user_weapon [Give User Weapon]

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

[STOCK] give_user_weapon [Give User Weapon]

Мнение от Nikolow » 20 Окт 2017, 15:53

[STOCK] give_user_weapon [Give User Weapon]
Автори: Craxor и Bugsy


Кратко описание:
  • Даване на оръжие/граната само с 1 ред.

Цел:
  • Улеснение работата на скриптъра
  • Подпомагане на начинаещите да си свършат работата бързо, лесно и качествено

Начин на употреба:

Код за потвърждение: Избери целия код

give_user_weapon( index , iWeaponTypeID , iClip=0 , iBPAmmo=0 , szWeapon[]="" , maxchars=0)
  • index е индексът на играча
  • iWeaponTypeID е оръжието, което искате да дадете в стил CSW_WEAPONID
  • iClip е с колко патрони да дойде оръжието
  • iBPAmmo е с колко пълнител да дойде оръжието
  • szWeapon (незадължително) - оръжието без weapon_
    - Показано в примерна - за получаването на гранатите
  • maxchars (незадължително) - максималният брой символи ако използвате szWeapon
    - Препоръчително: 20 символа
    - Показано в примерна - за получаването на гранатите

Изисквания:
  • Cstrike
  • Fun
  • Engine

Предимства:
  • Проверка дали играчът е жив
  • Проверка дали играчът има даденото оръжие и само му добавя clip/ammo, без да му дава самото оръжие (защото вече го има)
  • Настройка с колко clip да дойде оръжието
  • Настройка с колко ammo да дойде оръжието
  • Може да се използва за гранати
  • Връща името на оръжието без weapon_ префикса
  • Използват се CSW_ константите за даване на оръжието вместо weapon_ id.

Пример:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cstrike>
#include <fun>
#include <engine>

public plugin_init() 
{
	register_plugin("Weapons Menu", "0.1", "Nikolow")
	
	register_clcmd("say /weapons", "WeaponPacks");
}

public WeaponPacks(id)
{
	new menu = menu_create("Weapons Menu", "WeaponPacksFunc");
	
	menu_additem(menu, "Pistols", "1", 0);
	menu_additem(menu, "ShotGuns / Machine Gun", "2", 0);
	menu_additem(menu, "SMGs ", "3", 0);
	menu_additem(menu, "Snipers Rifle", "4", 0);
	menu_additem(menu, "Snipers", "5", 0);
	menu_additem(menu, "Grenades", "6", 0);
	
	menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
	menu_setprop(menu, MPROP_NUMBER_COLOR, "\y");
	
	menu_display(id, menu, 0);		
}

public WeaponPacksFunc(id, menu, item)
{	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], iName[64];
	new access, callback;
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
	new key = str_to_num(data);

	switch(key)
	{
		case 1:
		{
			give_user_weapon(id, CSW_GLOCK18, 12, 120);
			give_user_weapon(id, CSW_USP, 12, 100);
			give_user_weapon(id, CSW_P228, 12, 52);
			give_user_weapon(id, CSW_FIVESEVEN, 12, 100);
			give_user_weapon(id, CSW_ELITE, 12, 120);
			
			client_print(id, print_chat, "You have got all Pistols");
		}
		case 2:
		{
			give_user_weapon(id, CSW_M3,10, 32);
			give_user_weapon(id, CSW_XM1014, 10, 32);
			give_user_weapon(id, CSW_M249,120, 200);
			
			client_print(id, print_chat, "You have got all ShotGuns");
		}
		case 3:
		{
			give_user_weapon(id, CSW_MAC10, 30, 100);
			give_user_weapon(id, CSW_UMP45, 30, 100);
			give_user_weapon(id, CSW_MP5NAVY, 30, 120);
			give_user_weapon(id, CSW_TMP, 30, 120);
			give_user_weapon(id, CSW_P90, 30, 100);
			
			client_print(id, print_chat, "You have got all SMGs");
		}
		case 4:
		{
			give_user_weapon(id, CSW_AUG, 30, 90);
			give_user_weapon(id, CSW_GALIL, 30, 90);
			give_user_weapon(id, CSW_FAMAS, 30, 90);
			give_user_weapon(id, CSW_M4A1, 30, 90);
			give_user_weapon(id, CSW_SG552, 30, 90);
			give_user_weapon(id, CSW_AK47, 30, 90);
			
			client_print(id, print_chat, "You have got all Sniper Rifles");
		}
		case 5:
		{
			give_user_weapon(id, CSW_SG550, 10, 90);
			give_user_weapon(id, CSW_AWP, 10, 30);
			give_user_weapon(id, CSW_G3SG1, 10, 90);
			give_user_weapon(id, CSW_SCOUT, 10, 90);
			
			client_print(id, print_chat, "You have got all Snipers");
		}
		case 6:
		{
			new WeaponName[20];
			
			give_user_weapon( id, CSW_HEGRENADE, _, 1, WeaponName, charsmax( WeaponName ) );
			client_print( id, print_chat, " You have got 1 %s", WeaponName );
			
			give_user_weapon( id, CSW_FLASHBANG, _, 1, WeaponName, charsmax( WeaponName ) );
			client_print( id, print_chat, " You have got 1 %s", WeaponName );
			
			give_user_weapon( id, CSW_SMOKEGRENADE, _, 1, WeaponName, charsmax( WeaponName ) );
			client_print( id, print_chat, " You have got 1 %s", WeaponName );
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

give_user_weapon( index , iWeaponTypeID , iClip=0 , iBPAmmo=0 , szWeapon[]="" , maxchars=0 )
{
	if ( !( CSW_P228 <= iWeaponTypeID <= CSW_P90 ) || ( iClip < 0 ) || ( iBPAmmo < 0 ) || !is_user_alive( index ) )
		return -1;
	
	new szWeaponName[ 20 ] , iWeaponEntity , bool:bIsGrenade;
	
	const GrenadeBits = ( ( 1 << CSW_HEGRENADE ) | ( 1 << CSW_FLASHBANG ) | ( 1 << CSW_SMOKEGRENADE ) | ( 1 << CSW_C4 ) );
	
	if ( ( bIsGrenade = bool:!!( GrenadeBits & ( 1 << iWeaponTypeID ) ) ) )
		iClip = clamp( iClip ? iClip : iBPAmmo , 1 );
	
	get_weaponname( iWeaponTypeID , szWeaponName , charsmax( szWeaponName ) );
	
	if ( ( iWeaponEntity = user_has_weapon( index , iWeaponTypeID ) ? find_ent_by_owner( -1 , szWeaponName , index ) : give_item( index , szWeaponName ) ) > 0 )
	{
		if ( iWeaponTypeID != CSW_KNIFE )
		{
			if ( iClip && !bIsGrenade )
				cs_set_weapon_ammo( iWeaponEntity , iClip );
		
			if ( iWeaponTypeID == CSW_C4 ) 
				cs_set_user_plant( index , 1 , 1 );
			else
				cs_set_user_bpammo( index , iWeaponTypeID , bIsGrenade ? iClip : iBPAmmo ); 
		}
		
		if ( maxchars )
			copy( szWeapon , maxchars , szWeaponName[7] );
	}
	
	return iWeaponEntity;
}

Stock:

Код за потвърждение: Избери целия код

give_user_weapon( index , iWeaponTypeID , iClip=0 , iBPAmmo=0 , szWeapon[]="" , maxchars=0 )
{
	if ( !( CSW_P228 <= iWeaponTypeID <= CSW_P90 ) || ( iClip < 0 ) || ( iBPAmmo < 0 ) || !is_user_alive( index ) )
		return -1;
	
	new szWeaponName[ 20 ] , iWeaponEntity , bool:bIsGrenade;
	
	const GrenadeBits = ( ( 1 << CSW_HEGRENADE ) | ( 1 << CSW_FLASHBANG ) | ( 1 << CSW_SMOKEGRENADE ) | ( 1 << CSW_C4 ) );
	
	if ( ( bIsGrenade = bool:!!( GrenadeBits & ( 1 << iWeaponTypeID ) ) ) )
		iClip = clamp( iClip ? iClip : iBPAmmo , 1 );
	
	get_weaponname( iWeaponTypeID , szWeaponName , charsmax( szWeaponName ) );
	
	if ( ( iWeaponEntity = user_has_weapon( index , iWeaponTypeID ) ? find_ent_by_owner( -1 , szWeaponName , index ) : give_item( index , szWeaponName ) ) > 0 )
	{
		if ( iWeaponTypeID != CSW_KNIFE )
		{
			if ( iClip && !bIsGrenade )
				cs_set_weapon_ammo( iWeaponEntity , iClip );
		
			if ( iWeaponTypeID == CSW_C4 ) 
				cs_set_user_plant( index , 1 , 1 );
			else
				cs_set_user_bpammo( index , iWeaponTypeID , bIsGrenade ? iClip : iBPAmmo ); 
		}
		
		if ( maxchars )
			copy( szWeapon , maxchars , szWeaponName[7] );
	}
	
	return iWeaponEntity;
}
Последно промяна от Nikolow на 22 Окт 2017, 01:11, променено общо 3 пъти.
Tired and retired...

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

[STOCK / INC] iWeapon [Give Player Weapon]

Мнение от deadlylord » 20 Окт 2017, 15:59

Ще бъде хубаво да добавиш работещ strip weapons в STOCK / INC

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

[STOCK / INC] iWeapon [Give Player Weapon]

Мнение от OciXCrom » 20 Окт 2017, 16:00

Доста ненужно дълъг код. Целият код може да стане с няколко реда:

Код за потвърждение: Избери целия код

stock iWeapon(id, weapon, bullets)
{
	static szWeapon[32]
	get_weaponname(weapon, szWeapon, charsmax(szWeapon))
	give_item(id, szWeapon)
	cs_set_user_bpammo(id, weapon, bullets)
}
Пример: iWeapon(id, CSW_DEAGLE, 35)

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

[STOCK] iWeapon [Give Player Weapon]

Мнение от Nikolow » 20 Окт 2017, 18:25

Версия 0.2
Кодът вече е по-кратък, благодарение на OciXCrom идеята.

Относно strip weapons можеш да погледнеш ТУК.
Tired and retired...

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

[STOCK] iWeapon [Give Player Weapon]

Мнение от OciXCrom » 20 Окт 2017, 19:20

Можеш да добавиш и патрони по подразбиране в случай, че не е въведена стойност за "bullets":

Код за потвърждение: Избери целия код

stock iWeapon(id, weapon, bullets = -1)
{
	static const iMaxClip[] = { 0, 13, 0, 10, 0, 7, 0, 30, 30, 0, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 0, 7, 30, 30, 0, 50 }
	
	static szWeapon[32]
	get_weaponname(weapon, szWeapon, charsmax(szWeapon))
	give_item(id, szWeapon)
	cs_set_user_bpammo(id, weapon, bullets == -1 ? iMaxClip[weapon] : bullets)
}
iWeapon(id, CSW_DEAGLE, 35)
iWeapon(id, CSW_DEAGLE)

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

[STOCK] iWeapon [Give Player Weapon]

Мнение от TheRedShoko » 20 Окт 2017, 20:09

Добави проверка дали играчът е жив.

Аватар
DaRk_StyLe
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 264
Регистриран на: 26 Окт 2016, 12:40
Се отблагодари: 11 пъти
Получена благодарност: 33 пъти

[STOCK] iWeapon [Give Player Weapon]

Мнение от DaRk_StyLe » 21 Окт 2017, 08:22

Липсва и проверка дали подаденото оръжие е валидно. Съветвам те да погледнеш give_user_weapon() от Bugsy и Craxor.

P.S Хубав темплейт си използвал :rolle:

Аватар
Nikolow
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 196
Регистриран на: 27 Ное 2016, 13:02
Местоположение: Варна
Се отблагодари: 7 пъти
Получена благодарност: 79 пъти
Обратна връзка:

[STOCK] give_user_weapon [Give User Weapon]

Мнение от Nikolow » 22 Окт 2017, 01:12

Редактирана е цялата тема. Не виждам смисъл да се прави нещо, което вече е направено и е по-добре действащо.
Стилът на темата е от DaRk_StyLe.
Tired and retired...

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Полезни кодове/уроци”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта