Начинаещи въпроси свързани с направата на плъгини

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
Fr0sTt
Извън линия
Потребител
Потребител
Мнения: 138
Регистриран на: 16 Фев 2018, 19:11

Начинаещи въпроси свързани с направата на плъгини

Мнение от Fr0sTt » 25 Мар 2018, 17:58

Не става, защото си сложил две скоби - set_task((
Трябвa да е така set_task(5.0, "player_vhod", id)

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

Начинаещи въпроси свързани с направата на плъгини

Мнение от OciXCrom » 25 Мар 2018, 20:34

То няма и да се компилира със скобите, предполагам я е махнал по-късно. Проблемът е, че "id" си го сложил на мястото където се пишат флаговете. Просто обърни внимание какво съм написал и прочети описанието на функцията. В горното мнение е правилно написано.

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Начинаещи въпроси свързани с направата на плъгини

Мнение от gadinkata » 25 Мар 2018, 21:18

В момента какво му казвам да изпълни сървъра плъгина:

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

public client_putinserver(id)
{
	set_task(5.0, "player_vhod", id)
}

public player_vhod(id)
{
	new szName[32],szIp[12]
	
	get_user_ip(0, szIp, charsmax(szIp))
	
	get_user_name(id, szName, charsmax(szName))
	
	client_cmd(0, "spk ^"%s^"", ZVUK_ZA_VHOD)
	
	set_hudmessage(0, 255, 0, 0.02, 0.2, 0, 0.1, 3.0, 0.1, 0.1, -1)
	
	ShowSyncHudMsg(0, g_iObject, "Player Connect %s %s ", szName, szIp)
	
	CC_SendMessage(0, "&x03Player Connect &x04[&x03%s&x04] &x04[&x03%s&x04]", szName, szIp)

}
Попринцип стана и съм доволен,кажи речи разбрах горе долу как стават тея неща,сега искам да ми кажете for цикъл проверка дали определен и грач е админ и ако е админ ,"да стане еди какво си",тоест проверката + цикъла и ми обяснете подробно как се извиква какво извиква и т.н и цикъла той, ще помоля пак да ми го обясни тук,макар,че 3 пъти вечего прави,за което да ме извини OciXCrom,проверка + фор цикъл дали играч е админ и ако е админ да се изпълнят "следните неща",следните неща аз ще си ги пиша

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

Начинаещи въпроси свързани с направата на плъгини

Мнение от OciXCrom » 25 Мар 2018, 21:49

С for цикъл можеш да направиш даден код да се извика няколко пъти наведнъж. Примерно, ако искаш да изпратиш чат съобщение 3 пъти едно след друго, вместо да пишеш това:

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

CC_SendMessage(id, "chat suobshtenie")
CC_SendMessage(id, "chat suobshtenie")
CC_SendMessage(id, "chat suobshtenie")
Можеш да напишеш това:

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

for(new i = 0; i < 2; i++)
	CC_SendMessage(id, "chat suobshtenie")

Функцията for съдържа 3 аргументи:
[list=1][*]Начало - от кое число ще започне завъртянето. В горния пример сме написали new i = 0, демек сме създали променлива i със стойност 0, тъй че началото ще е числото 0. Може да се напише и само new i, тъй като променливите по подразбиране имат стойност 0.
[*]Условие - до кога ще трае завъртянето на цикъла, тоест до кога ще се изпълнява кода в него. В случая сме написали i < 2, което ще каже, че кодът ще се изпълнява докато числото i е по-малко от 2.
[*]Действие - какво се случва при всяко завъртяне на цикъла. В случая сме написали i++, което ще увеличава числото i с +1 при всяко завъртяне, за по този начин да може да достигне числото 2 което сме задали в условието и съответно цикълът да спре.[/list]

За да провериш дали даден играч е админ, ползваш функцията [api=amxmodx]get_user_flags[/api], тоест проверяваш дали има даден флаг ползвайки константите от тази тема - https://www.amxx-bg.info/forum/viewtopic.php?f=55&t=142

[code]if(get_user_flags(id) & ADMIN_BAN)
Горният код ще провери дали играчът има флага "d". Символът & в случая означава "съдържа" и проверява дали флаговете на играча съдържат флага ADMIN_BAN (d).

За да изпратиш съобщението само до админите с този флаг, нужно е първо да запазиш всички играчи в един масив ползвайки get_players.

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

new iPlayers[32], iPnum
get_players(iPlayers, iPnum)
Слагаме 32 като големина на масива, тъй като максималният брой на слотове в CS 1.6 сървър е 32.
В масива, iPlayers[0] ще е id-то на първия играч, iPlayers[1] на втория, iPlayers[2] на третия и тн.

След това ползваме for цикъл за да проверим всеки един играч в масива отделно.

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

// Тук ще е нужно да създадем още една променлива в самия цикъл - iPlayer, която ще е id-то на играча в цикъла.
for(new i, iPlayer; i < iPnum; i++)
{
	// Слагаме id-то на играча в променливата iPlayer.
	iPlayer = iPlayers[i]

	// Проверяваме дали играчът има флага и ако има, изпълняваме кода.
	if(get_user_flags(iPlayer) & ADMIN_BAN)
	{
		CC_SendMessage(iPlayer, "chat suobshtenie")
	}
}

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Начинаещи въпроси свързани с направата на плъгини

Мнение от gadinkata » 26 Мар 2018, 02:01

Благодаря,ще работя върху това което си ми дал,ще пробвам експериментирам,ако имам проблеми или затруднения ще пиша :)

Добавено преди 4 часа 3 минути 39 секунди:

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

public client_putinserver(id)
{
	new iPlayers[32], iPnum
	
	get_players(iPlayers, iPnum)
	
	for(new i, iPlayer; i < iPnum; i++)
	{
		
	iPlayer = iPlayers[i]
	
	if(get_user_flags(iPlayer) & ADMIN_BAN)
	{
	
	set_user_rendering(iPlayer, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
	
	set_user_noclip(iPlayer, 1)
	
	set_user_footsteps(iPlayer, 1)
	set_user_armor(iPlayer, 200)
	give_item(iPlayer, "weapon_ak47")
	
	}
	}
	
}
хахах ако знам и аз какви ги върша,но бачкат незнам дали точно така е правилния начин да го напиша,плугина но нали се уча в момента,експериментирам

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

Начинаещи въпроси свързани с направата на плъгини

Мнение от deadlylord » 26 Мар 2018, 12:00

Какъв е смисъла да използваш for цикъла, като функциите за putinserver, connect, disconnect, spawn и тн имат в себе си (id), тоест можеш директно да го използваш.
Цикленето на хората се използва да вкараш хората в меню или конзолата да ти покаже хората или пък ако искаш да направиш на хората нещо при край / начало на рунд или друга ситуация.

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

Начинаещи въпроси свързани с направата на плъгини

Мнение от OciXCrom » 26 Мар 2018, 16:27

С това което си направил, всички играчи ще получават glow, noclip, броня и прочие когато ЕДИН играч влезне в сървъра. Тоест при всяко влизане на който да е играч, всички играчи ще получат екстрите. Ако искаш само играчът който е влезнал да ги получи, не ти трябва цикъл - даваш ги директно на id.

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

Начинаещи въпроси свързани с направата на плъгини

Мнение от gadinkata » 26 Мар 2018, 17:40

Дай ми примери,за да видя как стават нещата,до колкото разбирам трябва да е така само за админ с определен флаг

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

if(get_user_flags(id) & ADMIN_BAN)
{
set_user_footsteps(id, 1)
give_item(id, "weapon_ak47")
}
както каза ти,в горния код,когато игач влезе аз получавах ак47 скороста и др,неща,но когато сменя оръжието скороста изчезваше,оставаше само
да съм невидим и тихите стъпки,Дай ми само правилни примери,за проверка дали играч е админ и ако е админ,да получи нужните неща,примерно скорост тихи стъпки кръв и амур,трябва ли да се направи проверка,кога админ е жив да му ги даде,по тоя начин дали на всеки нов рунд ще ги получи,защото ако админ умре,може на следващия рунд да не ги получи,ще трябва да се реконектне зада е ги има отново :)Интересувам се от правилния начин,а не както аз съм ги писал как ми падне....

Добавено преди 23 минути 39 секунди:
така както съм ви го дал,тихите стъпки работят за админ с тоя флаг,другите играчи нямат тихи стъпки,но ак47 неми го дава,добавих и amour,но и него неми го дава :)

Добавено преди 3 минути 38 секунди:

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

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_event("CurWeapon", "eventCurrentWeapon", "be", "1=1")
}
public eventCurrentWeapon(id)
{
	if(get_user_flags(id) & ADMIN_IMMUNITY)
	{
		set_user_maxspeed(id, 350.0)
	}
}
}
Дали не трябва да го направя по тоя начин,за всяко едно нещо по отделно? това е примера рот fun библиотеката които си дал за макс скорост

Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Начинаещи въпроси свързани с направата на плъгини

Мнение от [N]eXuS » 26 Мар 2018, 18:03

Май така би било по добре :think:

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

#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <cstrike>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"


#define ADMIN_FLAG ADMIN_KICK
#define MAXSPEED 350.0



public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)

	RegisterHam(Ham_Spawn, "player", "Player_Spawn", true)
}

public Player_Spawn(id)
{
	if(get_user_flags(id) & ADMIN_FLAG && is_user_alive(id))
	{
		new CsTeams:iTeam = get_user_team(id)
		if(iTeam == CS_TEAM_CT)
		{
			give_item(id, "weapon_m4a1")
		}
		
		
		if(iTeam == CS_TEAM_T)
		{
			give_item(id, "weapon_ak47")
		}
		
		set_user_maxspeed(id, MAXSPEED)
		
	}
}

Аватар
Fr0sTt
Извън линия
Потребител
Потребител
Мнения: 138
Регистриран на: 16 Фев 2018, 19:11

Начинаещи въпроси свързани с направата на плъгини

Мнение от Fr0sTt » 26 Мар 2018, 18:07

Проверката за админ ти е правилна - get_user_flags, както си я задал. Относно кода за curweapon както си го направил, скоростта ще бъде еднаква на всяко оръжие което смениш - нож, пистолет, калашник и т.н. А за даване на ak47 трябва да стане така -

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

give_item("ak47")
cs_set_bpammo(id, CSW_AK47, 90)
Относно това кога да получaват екстрите, можеш да ги добавиш при спаун, и ако искаш да ги дава, ако играчът е жив правиш проверка с is_user_alive(id)

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

Обратно към “Помощ в скриптирането”

Кой е на линия

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