Създаване на функция с plugin_natives()

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

Създаване на функция с plugin_natives()

Мнение от gadinkata » 21 Авг 2020, 20:19

Здравейте,намерих в един код създаден натив,и реших да се пробвам с него да създам плугин,с който да си давам определени точки,но не успявам в няколко неща!

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

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cromchat>

#if AMXX_VERSION_NUM < 183 || !defined set_dhudmessage
	#tryinclude <dhudmessage>

	#if !defined _dhudmessage_included
		#error "dhudmessage.inc" is missing in your "scripting/include" folder. Download it from: "https://amxx-bg.info/forum/inc/"
	#endif
#endif

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "IOCOCVETI"
enum _:gTochki
{
	XP
}

new Tochki[gTochki]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_task(1.0, "DisplayMessage", _, _, _, "b")
	
	register_event("DeathMsg", "Event_DeathMsg", "a")
	
	register_clcmd("say /Tochki","AddTochki")
	register_clcmd("say /Tochki2","ViewTochki")
}

public plugin_natives()
{
	register_native("gpoints_get_user_points","gpoints_get_user_points",1)
	register_native("gpoints_set_user_points","gpoints_set_user_points",1)
}

public gpoints_set_user_points(id,Amount)
{
	if(is_user_connected(id))
	{
	Tochki[XP] = Amount
	}
}

public gpoints_get_user_points(id)
{
	return !is_user_connected(id) ? Tochki[XP] : 0
}

public Event_DeathMsg()
{

	new iKiller = read_data(1), iVictim = read_data(2), iHeadshot = read_data(3)
	if(!is_user_connected(iKiller) || iKiller == iVictim)
	return
	
	if(iHeadshot)
	{
		if(is_user_bot(iKiller))
		return
		
		Tochki[XP]++
		gpoints_set_user_points(iKiller,gpoints_get_user_points(iKiller) + 100)
		CC_SendMessage(iKiller,"Tochki: %i",Tochki[XP])
	}
	
}

public AddTochki(id)
{
	gpoints_set_user_points(id,gpoints_get_user_points(id) + 1000)
	CC_SendMessage(id,"Tochki %i",gpoints_get_user_points(id))
	return PLUGIN_HANDLED
}

public ViewTochki(id)
{
	CC_SendMessage(id,"Tochki %i",gpoints_get_user_points(id))
	return PLUGIN_HANDLED
}

public DisplayMessage(id)
{
	set_dhudmessage(random(256), random(256), random(256), 0.0, 0.17, 0, 2.0, 1.0, 0.5, 1.0)
	show_dhudmessage(id,"Tochki: %i | %i", Tochki[XP],gpoints_get_user_points(id))
}

Първото нещо което не успявам да подкарам и не го разбирам е

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

return !is_user_connected(id) ? Tochki[XP] : 0
return is_user_connected(id) ? Tochki[XP] : 0
Когато съм направил така return !is_user_connected(id) ? Tochki[XP] : 0 Ми работи само dhuda и на двете места като си дам точки ми показва 1000|1000,но когато си давам в AddTochki съм добавил съобщение с колко точки съм,ми показва 0 а ми ги дава тия точки в худа,същото е и в ViewTochki ми излиза 0.Също така функцията винаги ми съдържа 0,защото колкото и да си пращам точки винаги стои 1000 или 100,не се увеличават
При return is_user_connected(id) ? Tochki[XP] : 0 е обратното в дхуда неми излиза функцията показвами 1000:0 ,а в AddTochki и ViewTochki ми излизат точките които съм добавил,дори се увеличават.

Имам и друг проблем,когато направя така new Tochki[33] и после в условията Tochki[id] пак както казах,но и deadmsg не ми отчита точките в dhuda.
Общо взето е това,ако може дайте малко пояснение и информация виждах нещо с iPlugin iParams get_param и тн.но не разбирам от тези неща

Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

Създаване на функция с plugin_natives()

Мнение от JackEyedJones » 21 Авг 2020, 20:45

В плъгина:

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

#include <amxmodx>

public plugin_natives()
{
	register_library("GPointsAPI");
	register_native("gpoints_get_user_points", "gpoints_get_user_points");
	register_native("gpoints_set_user_points", "gpoints_set_user_points");
}

public _gpoints_get_user_points(iPlugin, iParams)
	return Tochki[get_param(1)]

public _gpoints_set_user_points(iPlugin, iParams)
	return Tochki[get_param(1)] += get_param(2)
В include файла към него:

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

#if defined _gpointsapi_included
    #endinput
#endif

/* Returns user's current points */
native gpoints_get_user_points(id)

/* Sets users points */
native gpoints_set_user_points(id, points)
Ако имам пропуски, поправете ме. :hooray: Принципа на плъгина ти е грешен отвсякъде. :coffee:

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

Създаване на функция с plugin_natives()

Мнение от gadinkata » 21 Авг 2020, 20:58

JackEyedJones написа: 21 Авг 2020, 20:45 В плъгина:

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

#include <amxmodx>

public plugin_natives()
{
	register_library("GPointsAPI");
	register_native("gpoints_get_user_points", "gpoints_get_user_points");
	register_native("gpoints_set_user_points", "gpoints_set_user_points");
}

public _gpoints_get_user_points(iPlugin, iParams)
	return Tochki[get_param(1)]

public _gpoints_set_user_points(iPlugin, iParams)
	return Tochki[get_param(1)] += get_param(2)
В include файла към него:

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

#if defined _gpointsapi_included
    #endinput
#endif

/* Returns user's current points */
native gpoints_get_user_points(id)

/* Sets users points */
native gpoints_set_user_points(id, points)
Ако имам пропуски, поправете ме. :hooray: Принципа на плъгина ти е грешен отвсякъде. :coffee:
За това съм пуснал темата,да ми кажете начините,все пак това е тестов плъгин исках да проверя какво мога,по тоя начин успявам да научавам много неща :)

Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

Създаване на функция с plugin_natives()

Мнение от JackEyedJones » 21 Авг 2020, 21:04

Най-лесния начин по който се научих аз, понеже съм самоук до голяма степен в това, беше като гледам прости плъгини на крома.
В случая давам пример със създаване на API към плъгин за под-плъгини. Намерих негов прост такъв, пример BecomeVipPlus и с гледане и влагане на много мисъл разбрах принципа. Ако разбираш и се учиш бързо, отнема не повече от 1 следобед твърда занимавка. :dtm:

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

Създаване на функция с plugin_natives()

Мнение от gadinkata » 21 Авг 2020, 22:26

Сега го направих така,само на dhuda седи на 0,на всякаде ми отчида убийствата с каска,също така когато добавя _get_user_points(id)или _set_user_points(id)неми позволява да го компилирамerror 088: number of arguments does not match definition

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

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cromchat>

#if AMXX_VERSION_NUM < 183 || !defined set_dhudmessage
	#tryinclude <dhudmessage>

	#if !defined _dhudmessage_included
		#error "dhudmessage.inc" is missing in your "scripting/include" folder. Download it from: "https://amxx-bg.info/forum/inc/"
	#endif
#endif

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "IOCOCVETI"
enum _:gTochki
{
	XP
}

new Tochki[33][gTochki]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_task(1.0, "DisplayMessage", _, _, _, "b")
	
	register_event("DeathMsg", "Event_DeathMsg", "a")
	
	register_clcmd("say /Tochki","AddTochki")
	register_clcmd("say /Tochki2","ViewTochki")
}

public plugin_natives()
{
	register_library("gpoints")
	register_native("get_user_points","_get_user_points")
	register_native("set_user_points","_set_user_points")
}

public _get_user_points(iPlugin,iParams)
{
	return Tochki[get_param(1)][XP]
}

public _set_user_points(iPlugins,iParams)
{
	new id = get_param(1)
	return Tochki[id][XP] += clamp(get_param(2), 0)
}

public Event_DeathMsg()
{

	new iKiller = read_data(1), iVictim = read_data(2), iHeadshot = read_data(3)
	if(!is_user_connected(iKiller) || iKiller == iVictim)
	return
	
	if(iHeadshot)
	{
		if(is_user_bot(iKiller))
		return
		Tochki[iKiller][XP]++
		CC_SendMessage(iKiller,"Tochki: %i",Tochki[iKiller][XP])
	}
	
}

public AddTochki(id)
{
	CC_SendMessage(id,"Tochki %i",Tochki[id][XP])
	return PLUGIN_HANDLED
}

public ViewTochki(id)
{
	CC_SendMessage(id,"Tochki %i",Tochki[id][XP])
	return PLUGIN_HANDLED
}

public DisplayMessage(id)
{
	set_dhudmessage(random(256), random(256), random(256), 0.0, 0.17, 0, 2.0, 1.0, 0.5, 1.0)
	show_dhudmessage(id,"Tochki: %i", Tochki[id][XP])
	return PLUGIN_HANDLED
}


Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

Създаване на функция с plugin_natives()

Мнение от JackEyedJones » 21 Авг 2020, 22:38

И защо ти е енумерация за това, enum _: Конкретно тук Tochki[id][XP]
Сякаш ще използваш клиентската променлива за съхраняване на множество информация и я сегментираш така на отделни под-степени...
Без да слагаш долна черта _ пред нейтивите. Принципа е грешен за момента все така...

set_user_points(id, tochkite)
set_user_points(id, get_user_points(id) + tochkite)
get_user_points(id)

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

Създаване на функция с plugin_natives()

Мнение от gadinkata » 22 Авг 2020, 00:00

Пак тъпия dhud,неми извежда точките,показва ми само 0,а на другите места със същата функция ми показва,колко точки имам,и другия голям проблем е пускам си 1 цс пращам си примерно 10000 точки,влизам от другия цс проверявам колко точки имма показва ми пак 10000

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

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <gpoints>

#if AMXX_VERSION_NUM < 183 || !defined set_dhudmessage
	#tryinclude <dhudmessage>

	#if !defined _dhudmessage_included
		#error "dhudmessage.inc" is missing in your "scripting/include" folder. Download it from: "https://amxx-bg.info/forum/inc/"
	#endif
#endif

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

new Tochki[33]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_task(1.0, "DisplayMessage", _, _, _, "b")
	
	register_event("DeathMsg", "Event_DeathMsg", "a")
	
	register_clcmd("say /Tochki","AddTochki")
	register_clcmd("say /Tochki2","ViewTochki")
}

public plugin_natives()
{
	register_library("gpoints")
	register_native("get_user_points","_get_user_points")
	register_native("set_user_points","_set_user_points")
}

public _get_user_points(iPlugin,iParams)
{
	return Tochki[get_param(1)]
}

public _set_user_points(iPlugin,iParams)
{
	return Tochki[get_param(1)] = clamp(get_param(2), 0)
}

public Event_DeathMsg()
{

	new iKiller = read_data(1), iVictim = read_data(2), iHeadshot = read_data(3)
	if(!is_user_connected(iKiller) || iKiller == iVictim)
	return
	
	if(iHeadshot)
	{
		if(is_user_bot(iKiller))
		return
		Tochki[iKiller]++
		CC_SendMessage(iKiller,"Tochki: %i",get_user_points(iKiller))
	}
	
}

public AddTochki(id)
{
	set_user_points(id,get_user_points(id) + 100)
	CC_SendMessage(id,"Tochki %i",get_user_points(id))
}

public ViewTochki(id)
{
	CC_SendMessage(id,"Tochki %i",get_user_points(id))
}

public DisplayMessage(id)
{
	set_dhudmessage(random(256), random(256), random(256), 0.0, 0.17, 0, 2.0, 1.0, 0.5, 1.0)
	show_dhudmessage(id,"Tochki: %i", get_user_points(id))
}


Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

Създаване на функция с plugin_natives()

Мнение от JackEyedJones » 22 Авг 2020, 08:59

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

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <gpoints>

#if AMXX_VERSION_NUM < 183 || !defined set_dhudmessage
	#tryinclude <dhudmessage>

	#if !defined _dhudmessage_included
		#error "dhudmessage.inc" is missing in your "scripting/include" folder. Download it from: "https://amxx-bg.info/forum/inc/"
	#endif
#endif

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

new Tochki[33]

const AMMOUNT = 100;

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_task(1.0, "DisplayMessage", _, _, _, "b")
	
	register_event("DeathMsg", "Event_DeathMsg", "a")
	
	register_clcmd("say /Tochki","AddTochki")
	register_clcmd("say /Tochki2","ViewTochki")
}

public plugin_natives()
{
	register_library("gpoints")
	register_native("get_user_points","_get_user_points")
	register_native("set_user_points","_set_user_points")
}

public _get_user_points(iPlugin,iParams)
{
	return Tochki[get_param(1)]
}

public _set_user_points(iPlugin,iParams)
{
	return Tochki[get_param(1)] += get_param(2)
}

public Event_DeathMsg()
{

	new iKiller = read_data(1), iVictim = read_data(2), iHeadshot = read_data(3)

	if(!is_user_connected(iKiller) || iKiller == iVictim || is_user_bot(iKiller))
		return
	
	if(iHeadshot)
	{
		Tochki[iKiller]++
		CC_SendMessage(iKiller, "Tochki: %i", Tochki[iKiller])
	}
	
}

public AddTochki(id)
{
	Tochki[id] += AMMOUNT
	CC_SendMessage(id,"Tochki %i", Tochki[id])
}

public ViewTochki(id)
{
	CC_SendMessage(id,"Tochki %i", Tochki[id])
}

public DisplayMessage(id)
{
	set_dhudmessage(random(256), random(256), random(256), 0.0, 0.17, 0, 2.0, 1.0, 0.5, 1.0)
	show_dhudmessage(id,"Tochki: %i", Tochki[id])
}
clamp ограничава дадена променлива до диапазон от две стойности.
С нейтивите можеш да вземаш точките само във външни плъгини, в конкретно този вътре се четат като директно проверяваш променливата.

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

Създаване на функция с plugin_natives()

Мнение от gadinkata » 22 Авг 2020, 11:27

Да разбирам ли,че тези точки мога да ги вкарам в друг плъгин,тоест да проверя с get_user_points колко точки има и да му добавям с set_user_points ?

Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

Създаване на функция с plugin_natives()

Мнение от JackEyedJones » 22 Авг 2020, 11:41

Да, задължителво вписваш #include <gpoints> или както ти е библиотеката.

Това са ти шаблоните как да ги ползваш:

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

set_user_points(id, tochkite) - директно настройване на точки. 
set_user_points(id, get_user_points(id) + tochkite) - прибавяне на точки към сегашните
get_user_points(id) - четене на сегашните които играча има

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

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

Кой е на линия

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