Локално компилиране на плъгини

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 6606
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 115 пъти
Получена благодарност: 887 пъти
Обратна връзка:

Локално компилиране на плъгини

Мнение от OciXCrom » 05 Дек 2016, 16:42

  • Какво означава "локално" компилиране?
    • Компилиране е процесът на превръщане на .sma файл в .amxx, или по-точно на AMXX код в AMXX плъгин. Под термина "локално компилиране" се има предвид компилиране на плъгин чрез компилатор на вашия компютър, по-точно този в директорията на сървъра ви (compile.exe).
  • Защо е препоръчително да компилираме плъгините по този начин?
    • Силно препоръчвам да компилирате всичките си плъгини по този начин, тъй като ако ползвате онлайн компилатори или такива извън директорията на сървъра, възможно е да имате проблеми:
      • ако версията на компилатора е по-стара от тази на AMXX-а ви, плъгинът няма да тръгне изкарвайки грешки от типа на "invalid plugin version" и "bad load";
      • повечето онлайн компилатори нямат възможност за добавяне на собствени библиотеки (.inc файлове), така че ако плъгинът ползва такива, няма да можете да го компилирате или пък ще се компилира, обаче няма да работи.
      • ако добавите компилиран .amxx файл в сървъра, не можете да знаете какво има в него, така че огромна е вероятността някой да ви изпрати плъгин съдържащ "задни вратички" и после да се чудите как ви "хакват" сървъра, или пък плъгинът да е компилиран под по-нова АМХХ версия от вашата и същият изобщо няма да тръгне.
  • Какви файлове са нужни за да мога да компилирам плъгин локално?
    • Просто трябва да имате работеща сървър платформа, която съдържа файла compile.exe в scripting папката.
    • Версията на AMXX-а, който се ползва в платформата трябва да съответства с тази на сървъра.
    • Ако нямате сървър/платформа на вашия компютър, можете да изтеглите готовия компилатор за 1.8.2 от тук.
  • Как става локалното компилиране на плъгин?
    • Много лесно:
      • просто трябва да "хвърлите" .sma файла в compile.exe;
      • ако компилацията е била успешна, компилираният .amxx файл ще го намерите в папката scripting/compiled;
      • взимате файла от папката и го добавяте/заменяте в plugins папката, където се намират останалите ви плъгини;
      • записвате името на плъгина в plugins.ini, ако го няма.
Изображение
  • Какво да правим в случай, че имаме кода на плъгина, но не е в .sma файл?
    • Най-често във форумите ще получите готов код, вместо качен .sma файл. В такъв случай просто трябва да направите нов текстов документ и да го запазите с .sma разширение, като в него добавите кода.
  • Често срещани грешки:
    • при грешка от типа на "cannot read from file: име-на-файла" - липсва ви нужната библиотека (в случая име-на-файла.inc). Трябва да я изтеглите и сложите в папката scripting/include. Можете да намерите най-използваните библиотеки тук;
    • при грешка от типа на "symbol is marked as deprecated" - можете да я игнорирате. Показва се защото дадената функция е "стара" и има по-добър вариант за нея. Най-често се случва когато ползвате AMXX 1.8.3 и подобни грешки ще стават все по-чести с нови ъпдейти на АМХХ, тъй като нови, по-добри функции се добавят в системата. Ако не искате да се показва, трябва да замените функцията с новата, която е написана в самата грешка.

Аватар
mount4
Извън линия
Потребител
Потребител
Мнения: 187
Регистриран на: 03 Ное 2016, 19:54
Местоположение: Варна
Обратна връзка:

Re: Локално компилиране на плъгини

Мнение от mount4 » 05 Дек 2016, 17:01

Този онлайн компилатор се update-ва като има възможност да избереш версия на компилатора.
Вмомента е 1.8.3 и при липса на библиотека ти предоставя възможност да я качиш като се съхранява за половин час.
Дори можете да пратите мейл ако искате да добавите библиотека за постоянно.
Може да компилирва и ReAPI плъгини благодарение на мен защото изпратих мейл с реапи инклуудите.

-> https://amx.freakz.ro <-
94.190.190.195:27015 -> Изображение <-- Runemod here !
94.190.190.195:27017 -> Изображение

Segmentation fault Изображение <-- Opera browser !

Аватар
Just
Извън линия
Потребител
Потребител
Мнения: 335
Регистриран на: 23 Дек 2016, 19:10
Местоположение: http://cs-ultragaming.info
Се отблагодари: 4 пъти
Получена благодарност: 14 пъти
Обратна връзка:

Re: Локално компилиране на плъгини

Мнение от Just » 25 Май 2017, 21:12

Урока е добър помогна ми много
Изображение

Connect 93.123.18.5:27018
Connect 93.123.18.6:27015

Изображение

Аватар
Kasapin4
Извън линия
Потребител
Потребител
Мнения: 93
Регистриран на: 07 Авг 2018, 07:41
Се отблагодари: 16 пъти
Получена благодарност: 15 пъти

Локално компилиране на плъгини

Мнение от Kasapin4 » 27 Авг 2018, 15:20

Имам проблем на уйндовс 10 съм като пробвам да компилирам някой плъгин, ми изкарва следния еррор Ето за начало помислих че е нещо свързано с плъгина на хуехуе. Направих ново компилиране с плъгина на оксикром, същият резултат какъв е проблема?

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

Локално компилиране на плъгини

Мнение от OciXCrom » 27 Авг 2018, 15:23

Вероятно е някакъв проблем с правата. Опитай да преместиш компилатора извън C: или да му сложиш отметката "стартирай като администратор".

Аватар
Kasapin4
Извън линия
Потребител
Потребител
Мнения: 93
Регистриран на: 07 Авг 2018, 07:41
Се отблагодари: 16 пъти
Получена благодарност: 15 пъти

Локално компилиране на плъгини

Мнение от Kasapin4 » 27 Авг 2018, 15:28

OciXCrom™ написа:
27 Авг 2018, 15:23
Вероятно е някакъв проблем с правата. Опитай да преместиш компилатора извън C: или да му сложиш отметката "стартирай като администратор".
същият проблем?

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

Локално компилиране на плъгини

Мнение от OciXCrom » 27 Авг 2018, 16:29

Отметката я сложи на compile.exe, нали така? Опитай да сложиш и отметка за съвместимост с Windows XP Service Pack 3.

Аватар
HarveyWNvm
Извън линия
Потребител
Потребител
Мнения: 146
Регистриран на: 11 Яну 2018, 15:36
Местоположение: Пловдив
Се отблагодари: 18 пъти
Получена благодарност: 8 пъти
Обратна връзка:

Локално компилиране на плъгини

Мнение от HarveyWNvm » 29 Ное 2019, 18:41

Искам да знам, защо не ми излиза .amxx file Гледам и го правя точно но не ми излиза.

Ето кода

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

/*
 *	Title:
 *		CS Armor Drop (on death)
 *
 *	Summary:
 *		When a player dies, if they have armor, they will drop their armor on the ground next to their corpse.
 *  	A player can then walk over it and pick it up, letting them get a "percentage" of the armor left behind.
 *		Also, the player will recieve the same armor type as what they picked up.
 *		All armor will be deleted when round ends. Or on specified time (see cvars).
 *
 *	Cvars: 	
 *			armor_pct - (Default 20%) This is percentage of armor that will be received when its picked up.
 *			armor_max - (Default 100) This is the max amount of armor a user can get from picking up.		
 *			armor_min - (Default 15)  Minimum armor needed, for player to drop when killed.
 *			armor_removetime - (Default 2min) Time before armor is removed from map (unless round ends).
 *
 *
 *	Requires : AMXX 1.60
 *	Modules : Engine, FakeMeta
 *	Tested : Win32 (Linux untested)
 *
 *	Author:	 OneEyed
 *	Version: 1.1
 *
 *	Thanks : ccnncc99, sXy-Schreck, phear of rice, and Aunt Friggin' Connie, 
 *			For helping me test and fix this plugin!
 *
 *
 *	- Change Log:
 *		-v1.1 
 *		- Fixed to work on AMXX 1.60
 *		- Added "Armor Drop" CVAR for queries to pick up.
 */

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <zombieplague>

//---------------These values are default, they are added to the CVAR's---------------------
//---------------Change if you want these to be defaulted to the CVAR on SERVER RESTART-----

//----------------------------------------------------------------------
//This is percentage, if its 25, only 25% of dropped armor will be given.
#define ARMOR_TAX "25"
//----------------------------------------------------------------------
// MAX armor allowed, default = 150 (Set higher, if you want players to go over 150 armor.)
#define MAXARMOR "150"
//----------------------------------------------------------------------
// Minimum armor needed for armor to drop when player dies.
#define MINARMOR "15"
//----------------------------------------------------------------------
// Time before Armor is removed from the map in seconds (unless round ends) default=2mins
#define REMOVE_TIME "120"
//----------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------
//-----------------------------------DO NOT EDIT BELOW THIS LINE-----------------------------------------------
//-------------------------------------------------------------------------------------------------------------
#define KEVLAR 		1
#define VESTHELM 	2
#define ARMORTYPE_OFFSET 112

#define TITLE "Armor Drop"
#define VERSION "1.0"
#define AUTHOR "djodjo1996"

new g_ArmorType[33], Float:g_ArmorAmount[33], fArmor[33]

//Change this if you want a custom kevlar model
new armormodel[] = "models/w_kevlar.mdl"
new Float:multiplier
//-------------------------------------------------------------------------------------------------------------
public plugin_precache()
	precache_model(armormodel)	
//-------------------------------------------------------------------------------------------------------------
public plugin_init() {
	register_plugin(TITLE, VERSION, AUTHOR)
	register_cvar(TITLE,VERSION,FCVAR_SERVER)
	
	if(!cvar_exists("armor_pct"))
		register_cvar("armor_pct",ARMOR_TAX)
	if(!cvar_exists("armor_max"))
		register_cvar("armor_max",MINARMOR)
	if(!cvar_exists("armor_min"))
		register_cvar("armor_min",MINARMOR)
	if(!cvar_exists("armor_removetime"))
		register_cvar("armor_removetime",REMOVE_TIME)
		
	register_touch("FakeArmor","player","grabArmor")
	
	register_event("DeathMsg","createArmor","a")
	register_event( "SendAudio", "EndRound", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw" )
}
//-------------------------------------------------------------------------------------------------------------
//-----------Delayed it to be right at the end, (doesnt work if i try to erase it on Round Start)--------------
public EndRound()
	set_task(5.0,"removeArmor",1111)

public removeArmor() {
	new tempid = -1
	while ( ( tempid = find_ent_by_class(tempid, "FakeArmor") ) > 0)
		if(is_valid_ent(tempid)) {
			remove_entity(tempid)
			remove_task(tempid)
		}
	return PLUGIN_CONTINUE
}
//-------------------------------------------------------------------------------------------------------------
// Set task to this to remove the armor after specified amount of time. (armor_removetime)
public removeThisArmor(id)
	if(is_valid_ent(id))
		remove_entity(id)
//-------------------------------------------------------------------------------------------------------------
public grabArmor(pToucher, pTouched) {
	if(zp_get_user_zombie(pTouched)) 
	{
		client_print(pTouched, print_center, "Zombie cannot use kevlar!")
	}
	else 
	{
	if(is_user_alive(pTouched) && is_user_connected(pTouched) && entity_get_float(pTouched,EV_FL_armorvalue) < float(get_cvar_num("armor_max"))) {
		new owner = entity_get_int(pToucher, EV_INT_iuser1)
		if(is_valid_ent(fArmor[owner])) {
			get_armor_values(pTouched)
			multiplier = float(get_cvar_num("armor_pct")) * 0.01
			
			//Retrieve armor values left on the dropped kevlar
			new armortype = entity_get_int(fArmor[owner], EV_INT_iuser3)
			new armoramt = entity_get_int(fArmor[owner], EV_INT_iuser4)
			
			//Set armor accordingly to how player has theirs, and what type they grab.
			if(g_ArmorType[pTouched] == 0) 
				csset_user_armor(pTouched, armoramt*multiplier, (armortype==1?KEVLAR:VESTHELM))
			else if(g_ArmorType[pTouched] == 1 && armortype == 1) 
				csset_user_armor(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), KEVLAR)
			else if((g_ArmorType[pTouched] == 1 && armortype == 2) || g_ArmorType[pTouched] == 2) 
				csset_user_armor(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), VESTHELM)
			
			// If their armor goes over MAXARMOR set it to MAXARMOR
			if(entity_get_float(pTouched,EV_FL_armorvalue) > float(get_cvar_num("armor_max")))
				entity_set_float(pTouched,EV_FL_armorvalue, float(get_cvar_num("armor_max")))

			g_ArmorType[pTouched] = armortype
			remove_entity(fArmor[owner])
			remove_task(fArmor[owner])
		}
	}
	}
	return PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public createArmor(id) {
	new victim = read_data(2) //grab user ID who died
	
	get_armor_values(victim)
	
	if(g_ArmorType[victim] <= 0 || g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
		return PLUGIN_CONTINUE
	new origin[3]
	new Float:fOrigin[3]
	get_user_origin(victim,origin)
	for(new a=0;a<3;a++)
		fOrigin[a]=float(origin[a])

	fArmor[victim] = create_entity("info_target")
	if(fArmor[victim]) {
		entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")
		entity_set_model(fArmor[victim], armormodel)
		
		new Float:MinBox[3]
		new Float:MaxBox[3]
		MinBox[0] = -6.0
		MinBox[1] = -8.0
		MinBox[2] = -1.5
		MaxBox[0] = 6.0
		MaxBox[1] = 8.0
		MaxBox[2] = 1.5
		
		entity_set_vector(fArmor[victim], EV_VEC_mins, MinBox)
		entity_set_vector(fArmor[victim], EV_VEC_maxs, MaxBox)
		
		entity_set_int(fArmor[victim], EV_INT_solid, SOLID_BBOX) 
		entity_set_int(fArmor[victim], EV_INT_movetype, MOVETYPE_TOSS)
		
		// Sets iuser1 to victim ID
		entity_set_int(fArmor[victim], EV_INT_iuser1, victim)
		// Sets iuser3 to Armor Type (kevlar of vest+helm)
		entity_set_int(fArmor[victim], EV_INT_iuser3, g_ArmorType[victim])
		// Sets iuser4 to Armor Value (amount victim had when he died)
		entity_set_int(fArmor[victim], EV_INT_iuser4, floatround(g_ArmorAmount[victim]))

		entity_set_origin(fArmor[victim], fOrigin)
		set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
	}
	return PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public get_armor_values(id) {
	if(entity_get_float(id,EV_FL_armorvalue) <= 0.0)
		g_ArmorType[id] = 0
	else {
		g_ArmorAmount[id] = entity_get_float(id,EV_FL_armorvalue)
		g_ArmorType[id] = get_pdata_int(id,ARMORTYPE_OFFSET)
	}	
}
//-------------------------------------------------------------------------------------------------------------
//Cstrike.inc has this function, but its broken, so i made my own that works =).
public csset_user_armor(id, Float:amount, type) {
	entity_set_float(id,EV_FL_armorvalue, amount)
	set_pdata_int(id,ARMORTYPE_OFFSET,type)	
}
//-------------------------------------------------------------------------------------------------------------

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 519
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 108 пъти
Обратна връзка:

Локално компилиране на плъгини

Мнение от mi0 » 29 Ное 2019, 20:24

Потърси ли в Compiled? Може ли да пратиш снимка от конзолата, след като си компилирал(НЕ конзолата на сървъра, а тази в която се изписва debug информацията - compile.exe).
They call me kurdokoleno
Catch Mod - 93.123.18.38:27018

Аватар
HarveyWNvm
Извън линия
Потребител
Потребител
Мнения: 146
Регистриран на: 11 Яну 2018, 15:36
Местоположение: Пловдив
Се отблагодари: 18 пъти
Получена благодарност: 8 пъти
Обратна връзка:

Локално компилиране на плъгини

Мнение от HarveyWNvm » 30 Ное 2019, 12:51

Да потърсих нали чета всичко и става. Когато направих един плъгин за безплатно 500 броня само за админите нямаше .amxx file влезна addons > amxmodx > scripting > compiled. Този плъгин стана а другият не е станало. В мен ли е грешката искам само да знам иначе всичко го правя на добро качество

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

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

Кой е на линия

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