[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
RideeR ;]
Извън линия
Потребител
Потребител
Мнения: 170
Регистриран на: 05 Окт 2016, 21:30
Получена благодарност: 3 пъти

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от RideeR ;] » 06 Окт 2016, 17:34

Въведение в AMX Mod X Скриптирането
Първа част от поредицата за научаването на pawn скриптирането
Автор: hateYou @ amxmodxbg.org
Първото което ще видите, като отворите сорс файла на някой плугин е:

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

#include <amxmodx> 
.. е разбира се, може да има и други такива подобни линии, които да инклудват (вкарват/включват) и други "неща".

Тези "неща" са тъй наречените библиотеки.

Един AMX Mod X плугин може да има 4 главни типа функции.
Първият е public (публична), което ще рече че е публично видима за AMX Mod X енджина.
Втората е native функция, която е декларирана в модул или в AMX Mod X Ядрото.
Третата е нормална-обикновена потребителска функция, която се декларира без никакви специални атрибути пред името й.
Четвъртата е forward, тя се извиква при някои определени събития, но иначе по същност и тя се пада публична функция.

За да регистрираме плугина в AMX Mod X е нужно да го инициализираме посредством plugin_init() функцията.
Тя се води публична (public) функция и не приема никакви параметри.
Нейното извикване става веднага след зареждането на картата.

В нея НЕ Е нужно, но е препоръчително да се сложи native функцията register_plugin.
Тя служи за регистрирането на плугина Ви, като добавя името, версията и неговия автор-създател.
Тази информация може да бъде видяна при написването на "amxx list" командата в сървърната конзола.

Ето и един примерен код на това, до което в момента сме стигнали:

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

#include <amxmodx>
public plugin_init() {
 register_plugin("Test", "1.0", "AMX Mod X BG")
} 
register_plugin() функцията приема 3 параметъра.
1вият указва името на плугина.
2рият - неговата версия
3тият - автора на плугина

Създаване на команди

Всяка команда, която се регистрира посредством плугин се регистрира като конзолна команда.
Когато искате да регистрирате някаква команда, вие трябва да дефинирате четири опцийки:
  • 1. Името на самата команда
    2. Функцията, която интерпретира командата
    3. Нивото/level-а за достъп до командата
    4. Кратко описание на командата
Сега ще ви демонстрирам код на плугин с доста проста функция на работа.
Чрез команда, плугинът ще дава на играча допълнително кръв към текущата си.

За да регистрираме командата (която в случая ще е: /kruv), трябва да поставим register_clcmd() функцията в plugin_init().
Но понеже не желая да усложнявам кода, няма да правя командата само за администратори с даден level и затова няма да добавя останалите 2 параметъра, тъй като ще бъде SAY команда /ще се изпълнява в чата/ не е нужно да й слагам някакво описание.

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

#include <amxmodx>

public plugin_init() {
    register_plugin("Give me HP", "1.0", "AMX Mod X BG")
    register_clcmd("say /kruv", "give_hp")
} 
.. след това пишем самата функция, която ще обслужва "say /kruv" командата:

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

public give_hp(id) {

} 
.. както забелязвате функцията приема един параметър, в случая ID, но може да бъде кръстен както си искате.
Той ще отговаря на индекса на играча в сървъра (от 1 до 32).

Понеже ще ползваме функция, която я има във fun модула, трябва да Include-нем fun.inc библиотеката.
За целта под

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

#include <amxmodx> 
добавяме

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

#include <fun> 
След това в give_hp() пишем

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

new segashna_kruv = get_user_health(id) // Присвояваме стойността, която ще ни върне функцията get_user_health в променливата segashna_kruv
set_user_health(id, segashna_kruv + 50) // Добавяме 50 кръв отгоре за играча, който е написал командата 
Крайният вариант на този код би бил:

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

#include <amxmodx>
#include <fun>

public plugin_init() {
    register_plugin("Give me HP", "1.0", "AMX Mod X BG")
    register_clcmd("say /kruv", "give_hp")
}

public give_hp(id) {
    new segashna_kruv = get_user_health(id) // Присвояваме стойността, която ще ни върне функцията get_user_health в променливата segashna_kruv
    set_user_health(id, segashna_kruv + 50) // Добавяме 50 кръв отгоре за играча, който е написал командата
} 
И съответно като напишете в чата /kruv или в клиент конзолата say /kruv, плугинът ще добави 50 кръв към сегашната ви.
И аналогично, ако искате да извадите, умножите, разделите, използвайте другите аретметичните знаци:
  • 1. - (минус)
    2. * (по/умножено)
    3. / (делено)
Как да използваме CVAR команди в нашите плугини
(CVAR == C = Command .... VAR = Variable => Командна променлива)
Ще използвам за база - горният код.

За да регистрирате CVAR (в случая ще бъде ЧИСЛО и ще оказва колко кръв да се даде на играча при написването на /kruv), трябва да добавите register_cvar функцията в plugin_init.
.. няма значение, дали ще бъде под, или над register_clcmd.

Самата функция приема два параметъра:
  • 1. Името на командната променлива
    2. Нейната първоначална (default) стойност

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

register_cvar("amx_how_much_hp", "50") 
В give_hp() ще създадем променлива, която да присвоява стойността на вече създадената CVAR:

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

new kolko_kruv = get_cvar_num("amx_how_much_hp") 
.. след това променяме

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

set_user_health(id, segashna_kruv + 50) 
на

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

set_user_health(id, segashna_kruv + kolko_kruv) 
.. иии крайният вариант би бил:

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

#include <amxmodx>
#include <fun>

public plugin_init() {
    register_plugin("Give me HP", "1.0", "AMX Mod X BG")
    register_clcmd("say /kruv", "give_hp")
    register_cvar("amx_how_much_hp", "50")
}

public give_hp(id) {
    new kolko_kruv = get_cvar_num("amx_how_much_hp")

    new segashna_kruv = get_user_health(id) // Присвояваме стойността, която ще ни върне функцията get_user_health в променливата segashna_kruv
    set_user_health(id, segashna_kruv + kolko_kruv) // Добавяме XXXX кръв отгоре за играча, който е написал командата
} 

Източник: amxmodx.org
Превод: hateYou

Аватар
Marinovv
Извън линия
Потребител
Потребител
Мнения: 511
Регистриран на: 19 Сеп 2017, 10:01
Местоположение: България
Се отблагодари: 530 пъти
Получена благодарност: 13 пъти
Обратна връзка:

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от Marinovv » 13 Фев 2018, 23:30

При опит, за компилиране дава грешка и не се компилира локално:

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

//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// GivemeHP.sma
// E:\Program Files\Counter-Strike\cstrike\addons\amxmodx\scripting\GivemeHP.sma(11) : error 020: invalid symbol name ""
// E:\Program Files\Counter-Strike\cstrike\addons\amxmodx\scripting\GivemeHP.sma(13) : error 020: invalid symbol name ""
//
// 2 Errors.
// Could not locate output file E:\Program Files\Counter-Strike\cstrike\addons\amxmodx\scripting\compiled\GivemeHP.amx (compile failed).
//
// Compilation Time: 0,17 sec
// ----------------------------------------

Press enter to exit ...
Иван Маринов,

лицензиран оператор и пилот на професионални дронове клас C1 за всички държави в EU.

DJI Mavic 3 Classic | DJI Mavic 3 PRO - погледни света от различна перспектива.

Последвайте ме във Facebook

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

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от TheRedShoko » 13 Фев 2018, 23:42

Компилира си нормално. Какъв компилатор използваш, да не е стар, защото не пише версията на AMXX-a, а би трябвало? Ти ли го писа или го copy-paste-на? Ако си го писал ти - дай да видим какво си написал.

Аватар
Marinovv
Извън линия
Потребител
Потребител
Мнения: 511
Регистриран на: 19 Сеп 2017, 10:01
Местоположение: България
Се отблагодари: 530 пъти
Получена благодарност: 13 пъти
Обратна връзка:

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от Marinovv » 13 Фев 2018, 23:48

Аз първо го пренаписах и опитах с мой код не стана. Пробвах копнах с този пак не става. Грешките и на моя и на този код са еднакви. Липсва име някакво в скоби..
Иван Маринов,

лицензиран оператор и пилот на професионални дронове клас C1 за всички държави в EU.

DJI Mavic 3 Classic | DJI Mavic 3 PRO - погледни света от различна перспектива.

Последвайте ме във Facebook

Аватар
Nixe
Извън линия
Потребител
Потребител
Мнения: 159
Регистриран на: 07 Дек 2017, 03:57
Получена благодарност: 1 път

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от Nixe » 14 Фев 2018, 00:16

А случайно библиотеката fun да ти е активна ?
Изображение

Аватар
Marinovv
Извън линия
Потребител
Потребител
Мнения: 511
Регистриран на: 19 Сеп 2017, 10:01
Местоположение: България
Се отблагодари: 530 пъти
Получена благодарност: 13 пъти
Обратна връзка:

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от Marinovv » 14 Фев 2018, 00:21

Какво значи активна? Имам fun.inc. Би ли споделил как да проверя дали е активна?
Иван Маринов,

лицензиран оператор и пилот на професионални дронове клас C1 за всички държави в EU.

DJI Mavic 3 Classic | DJI Mavic 3 PRO - погледни света от различна перспектива.

Последвайте ме във Facebook

Аватар
Nixe
Извън линия
Потребител
Потребител
Мнения: 159
Регистриран на: 07 Дек 2017, 03:57
Получена благодарност: 1 път

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от Nixe » 14 Фев 2018, 00:35

Влез в cstrike/addons/amxmodx/configs/modules.ini
Ще видиш това

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

;;;
; To enable a module, remove the semi-colon (;) in front of its name.
; If it's not here, simply add it its name, one per line.
; You don't need to write the _amxx part or the file extension.
;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SQL Modules usually need to be enabled manually ;;
;; You can have any number on at a time.  Use      ;;
;;  amx_sql_type in sql.cfg to specify the default ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;mysql
;sqlite

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Put third party modules below here.              ;;
;; You can just list their names, without the _amxx ;;
;;  or file extension.                              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; These modules will be auto-detected and loaded   ;;
;;  as needed.  You do not need to enable them here ;;
;;  unless you have problems.                       ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

fun
;engine
;fakemeta
;geoip
;sockets
;regex
;nvault
cstrike
csx
;hamsandwich
Ако има ; Значи са не активни :) премахни това ; и готово :д
Изображение

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

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от OciXCrom » 14 Фев 2018, 02:03

@Nixe - би ли обяснил какво общо има това с компилацията на плъгина? Недей да объркваш хората като не разбираш. Човекът се опитва да компилира плъгин, а ти му казваш да активира модул в сървъра, който може би и не съществува. И, не е вярно, че модулът е неактивен ако има ; отпред. Модулите се активират автоматично когато са нужни, както си пише в самия файл.

Аватар
Nixe
Извън линия
Потребител
Потребител
Мнения: 159
Регистриран на: 07 Дек 2017, 03:57
Получена благодарност: 1 път

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от Nixe » 14 Фев 2018, 02:23

Аз го компилирах през AmxStudio за това му казвам да пробва така.
Изображение

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

[от hateYou] Урок 1: Въведение в AMX Mod X Скриптирането

Мнение от OciXCrom » 14 Фев 2018, 02:29

Файлът modules.ini няма нищо общо с компилацията. Даже можеш и изцяло да го изтриеш - няма да има никаква промяна. Само файловете в include папката са от значение.

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

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

Кой е на линия

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