Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

4 страниц V   1 2 3 »

Программирование для начинающих

Flash
сообщение 8.1.2012, 0:47
Сообщение #1
Стаж: 14 лет

Сообщений: 793
Благодарности: выкл.

Авторы: joaquimandrade, Exolent[jNr]
Перевод и редактирование: DJ_WEST

Часть 1. Числа, множества чисел.
Для сохранения чисел нам необходимо место, называемое "переменной". Ее создание происходит следующим путем:
Код
new numberHolder

new - означает, что мы создали переменную.
numberHolder - это название (метка) переменной, необходимое для дальнейщего к ней обращения.
Это называется "объявление переменной".

Чтобы сохранить число в нашей переменной, мы делаем:
Код
numberHolder = 5

Где 5 - это наше число, к примеру.

Для сохранения множества чисел нам необходимо место, называемое "массивом". Его создание происходит следующим путем:
Код
new numberGroupHolder[x] 

Где x количество чисел, которые мы сможем хранить в массиве (его размер).
Этот массив будет иметь x позиций. Одно для каждого числа. Чтобы обратиться к позиции, мы делаем:
Код
numberGroupHolder[0]  

Где 0 - это наша позиция, к примеру. Последняя позиция будет x-1. Следовательно, для хранения цвета нам необходимо сделать:
Код
new color[3]

color[0] = 0
color[1] = 100
color[2] = 255

Или:
Код
new color[3]

color = { 0, 100, 255 }  

Или:
Код
new color[3] = { 0, 100, 255 }  

Все эти способы имеют одинаковый эффект и означают одно и тоже. Наиболее предпочтительными способами являются второй и третий, третий удобно использовать при объявлении "глобальной" переменной. Глобальная переменная - это переменная, которая создается один раз и хранится в памяти на протяжении всего периода действия плагина, и к которой можно обращаться из любой функции.
Pawn позволяет делать арифметические операции, поэтому мы можем сделать нашу переменную с данными о цвете немного темнее:
Код
color[0] = color[0] - 10
color[1] = color[1] - 10
color[2] = color[2] - 10


Если нам нужно изменить цвет не только у одной переменной, то не обязательно выполнять арифметические действия для каждой из них. Для этого мы создадим "функцию":
Код
darkenColor(anyColor[3])
{
    anyColor[0] = anyColor[0] - 10
    anyColor[1] = anyColor[1] - 10
    anyColor[2] = anyColor[2] - 10

 

Это называется "объявлении функции darkenColor".
darkenColor - это название функции (метка), которое мы будем потом использовать при обращении к ней.
anyColor - это название переменной, которое мы передаем функции для дальнейщего ее использования.

Между скобками функции находится ее аргумент (anyColor[3]). Между { } находится тело функции, набор действий, которые необходимо выполнить.
К примеру, для изменения цвета нескольких переменных, мы делаем:
Код
new someColor[3] = {100,100,100}
new otherColor[3] = {50,100,150}
new anotherColor[3] = {255,30,233}

darkenColor(someColor)
darkenColor(otherColor)
darkenColor(anotherColor) 
 

Это называется "вызов функции darkenColor". Перед тем, как ее вызывать, функция должна быть объявлена. В результате выполнения данного кода, мы получим следующие результаты:
someColor будет хранить значения 90,90,90.
otherColor будет хранить значения 40,90,140.
anotherColor будет хранить значения 245,20,223.

Но у нашей функции есть проблема. Если одно из значений переменной, которое мы передаем нашей, будем меньше 10, то мы получим отрицательный результат, что неверно, потому что значение цвета должно быть в пределах от 0 до 255.
Поэтому нам требуется создать "условие":
Код
darkenColor(anyColor[3])
{
    anyColor[0] = anyColor[0] - 10
    anyColor[1] = anyColor[1] - 10
    anyColor[2] = anyColor[2] - 10
    
    if(anyColor[0] < 0)
    {
        anyColor[0] = 0
    }
    
    if(anyColor[1] < 0)
    {
        anyColor[1] = 0
    }
        
    if(anyColor[2] < 0)
    {
        anyColor[2] = 0    
    }
}  

Между скобками после выражения if мы имеем условие (anyColor[0] < 0).
Между { } мы имеем тело условия, которое будет выполняться в том случае, если условие верно. То есть anyColor[0] = 0, когда anyColor[0] < 0.

Наша функция немного не практична. Мы не можем сказать ей (функции) насколько хотим изменить яркость цвета. Поэтому переделаем ее так:
Код
changeColorLuminosity(anyColor[3], factor)
{
    anyColor[0] = anyColor[0] + factor
    anyColor[1] = anyColor[1] + factor
    anyColor[2] = anyColor[2] + factor
    
    if(anyColor[0] < 0)
    {
        anyColor[0] = 0
    }
    
    if(anyColor[1] < 0)
    {
        anyColor[1] = 0
    }
        
    if(anyColor[2] < 0)
    {
        anyColor[2] = 0    
    }
}  

Теперь передавая функции changeColorLuminosity еще один аргумент, который называется factor, мы можем более практично менять яркость цвета. Передавая положительный factor мы делаем цвет ярче, передавая отрицательный factor - темнее. Но теперь у нас есть проблема, что значение может превысить число 255, поэтому решаем проблему:
Код
changeColorLuminosity(anyColor[3],factor)
{
    anyColor[0] = anyColor[0] + factor
    anyColor[1] = anyColor[1] + factor
    anyColor[2] = anyColor[2] + factor
    
    if(anyColor[0] < 0)
    {
        anyColor[0] = 0
    }
    
    if(anyColor[1] < 0)
    {
        anyColor[1] = 0
    }
        
    if(anyColor[2] < 0)
    {
        anyColor[2] = 0    
    }
    
    if(anyColor[0] > 255)
    {
        anyColor[0] = 255
    }
    
    if(anyColor[1] > 255)
    {
        anyColor[1] = 255
    }
        
    if(anyColor[2] > 255)
    {
        anyColor[2] = 255 
    }
}  


Наша функция будет работать, но ее можно улучшить, потому что нам не нужно проверять больше ли число 255, когда оно меньше 0:
Код
changeColorLuminosity(anyColor[3],factor)
{
    anyColor[0] = anyColor[0] + factor
    anyColor[1] = anyColor[1] + factor
    anyColor[2] = anyColor[2] + factor
    
    if(anyColor[0] < 0)
    {
        anyColor[0] = 0
    }
    else if (anyColor[0] > 255)
    {
        anyColor[0] = 255
    }
    
    if(anyColor[1] < 0)
    {
        anyColor[1] = 0
    }
    else if (anyColor[1] > 255)
    {
        anyColor[1] = 255
    }
        
    if(anyColor[2] < 0)
    {
        anyColor[2] = 0
    }
    else if (anyColor[2] > 255)
    {
        anyColor[2] = 255
    }

 

Данный участок кода:
Код
    if(anyColor[x] < 0)
    {
        anyColor[x] = 0
    }
    else if (anyColor[x] > 255)
    {
        anyColor[x] = 255
    } 
 

Можно прочитать так: если значение переменной anyColor меньше нуля, то оно равняется нулю, иначе если значение больше 255, то оно равняется 255.

Часть 2. Символы, множество символов.
Строки
Строка - это два или более смежных символа. С точки зрения программирования, строка - это множество чисел. Каждый символ имеет ASCII кодировку, которая представляется числами от 0 до 255. В данной статье мы будем рассматривать только символы алфавита, хотя у ASCII есть и множество других. Строка должна заканчиваться пустым символом, которое в таблице ASCII имеет значение 0. Когда данное число будет найдено - значит это конец строки. Когда вы объявляете массив для хранения строки, необходимо увеличивать его размер на 1, чтобы иметь место для пустого символа. Например, для хранения слова "word" в вашей строке, объявленный массив будет new szWord[5]. Когда вы объявляете массив, каждый элемент равен пустому символу, поэтому не нужно прописывать конец строки самостоятельно. Имейте в виду, что массив начинается с 0, так в нашем примере символы будут иметь 0-4 позиции.

Кодировка ASCII
Запомните, что заглавные и строчные символы не равны. К примеру, 'a' это не одно и тоже, что и 'A'.

Значения ASCII кодировки:
A-Z диапозон 65-90. 65 = 'A' и 90 = 'Z'.
a-z диапозон 97-122. 97 = 'a' и 122 = 'z'.

Объявление строк
К примеру, мы хотим объявить строку и сохранить в ней слово "word" или "WORD".

Мы можем сделать это несколькими путями:
Код
new szWord[] = "word"
new szWord[] = "WORD"  

При объявлении строки и присвоения ей значения (слова) размер массива указывать не нужно, компилятор сделает это автоматически.
Или:
Код
new szWord[5]
szWord[0] = 119 //w
szWord[1] = 111 //o
szWord[2] = 114 //r
szWord[3] = 100 //d
szWord[4] = 0   // конец строки - это делать не обязательно, потому что при объявлении массива все его элементы р
авны пустому значению

szWord[0] = 87 //W
szWord[1] = 79 //O
szWord[2] = 82 //R
szWord[3] = 68 //D
szWord[4] = 0  // конец строки - это делать не обязательно, потому что при объявлении массива все его элементы р
авны пустому значению

// Вам необязательно запоминать значения кодировки ASCII, для этого достаточно исп
ользовать
// и символы с использованием одной кавычки

szWord[0] = 'w'
szWord[1] = 'o'
szWord[2] = 'r'
szWord[3] = 'd'
szWord[4] = '^0' 
 


Завершение строки
Напомним, что если в строки найдено пустое значение (0), то следовательно - это конец строки.

Маленький пример:
Код
new szWord[] = "alphabet"

szWord[5] = 0  // Установка 'b' в пустое значение

//Результатом будет "alpha" вместо "alphabet"      


Перемещение по строке (циклы)
Рассмотрим пример перемещения по строке для подсчитывания количества пробелов и символа 't'. Это можно сделать с использованием if/else или switch.

Цикл - это механизм повторения одно и того же кода программы определенное количество раз. В данном случае мы знаем количество повторений, поэтому будем использовать цикл for.
Его синтаксис: for ( выражение1 ; выражение2 ; выражение3 )

Пояснение:
выражение1 - обычно используется для объявления переменной-индекса и присвоения ей первоначального значения.
выражение2 - условие, которое используется перед началом каждого повторения, если оно возвращает значение верно (true), то происходит выполнение кода цикла.
выражение3 - используется обычно для увеличения переменной-индекса, объявленной в выражение1.
Примечание: Вы можете не использовать выражения: for ( ; ; ) (это приведет к бесконечному циклу, не делайте этого, если вы не понимаете, что делаете).

Код
//Выражение1: Объявление переменной-индекса i и присвоение ей значения 0 (по умолчанию). 
//Выражение2: Выполнять цикл пока i > 9 (цикл будет выполняться пока i <= 9).
//Выражение3: Увеличение i на один (каждый раз увеличение i на 1).

// В данном цикле выполнение кода произойдет при i = 0. Выполниться тело цикла, а 
затем произойдет обращение к выражению2.
// Если это выражение верно, то произойдет обращение к выражению3.
// Цикл будет выполняться пока выражение2 не станет неверным (false).

for ( new i ; i <= 9 ; i++ )
{
        // код, который будет выполняться
}  


strlen() - это функция, встроенная в AMXX, которая вернет длину строки (не включая пустое значение).

Код
new szString[] = "this is a test string" // Объявление массива и присвоение ему предложения "this is a test string".
new iLen = strlen( szString ) // Объявление переменной iLen и присвоение ей длины строки szString. Если вы знает
е длину, ее можно указать вручную.
new iSpaces
new iLetter_t

// Начинаем с 0 и выполняем цикл пока i меньше длины строки
for ( new i = 0 ; i < iLen ; i++ )
{
        if ( szString[i] == ' ' )
                iSpaces++
        else if ( szString[i] == 't' )
                iLetter_t++

// или
        switch ( szString[i] )
        {
                case ' ': iSpaces++
                case 't': iLetter_t++
        }
}
 

Результат:
Пробелов: 4
Символа 't': 4

Создание массива для хранение строчного алфавита:
Код
new szAlphabet[27] // 26 символов + 1 пустой символ

// 'a' имеет значение 97 в кодировке ASCII, следовательно мы будем добавлять его в
 нашем цикле

for ( new i = 0 ; i < 26 ; i++ )
        szAlphabet[i] = i + 97 // Присвоение переменной значение и его увеличение

// Что у нас получится в результате выполнения цикла:
// szAlphabet[0] = 97   //a
// szAlphabet[1] = 98   //b
// szAlphabet[2] = 99   //c
// szAlphabet[3] = 100  //d
// ...
// szAlphabet[25] = 122  //z 
 


Массив строк
Вы можете создать массив строк известный также, как "двумерный массив".
Код
new szString[][] = { "this" , "is" , "an" , "array" , "of" , "strings" }
// Следовательно каждый элемент массива будет хранить определенное значение: szString[0] = "this", szString[1] = "is"

// Если массив будет заполняться в режиме работы плагина, например, для хранения и
мен игроков или их Steam ID
new szString[кол-во строк][длина самой длинной строки] 
 


К примеру, чтобы получить доступ к слову "array" в нашем двумерном массиве, мы будем использовать szString[3]. Чтобы получить доступ к одному символу, например, первому 'r' в слове 'array', мы будем использовать szString[3][1].

Часть 3. Условные выражения.
Основные
Условные выражения - это выражения, которые позволяют решить, что делать с участком кода.
Например:
&& используется для выражения "и"
|| испольузется для выражения "или"

Пример:
Код
// x больше 0 или меньше или равно 255
x > 0 || x <= 255

// x больше 15 и y меньше 10
x > 15 && y < 10

// x меньше 15
// или y меньше 0 и y больше -10
x < 15 || y < 0 && y > -10

// x больше 16
// и y больше 10 или y меньше 0
x > 16 && (y > 10 || y < 0)

// a больше b и c меньше d и e меньше f
a > b && c < d && e < f


Неравенства можно использовать в различных форматах:
Код
// x больше 0 и меньше или равно 5
x > 0 && x <= 5

// Тоже самое, только в более красивой и удобной форме
0 < x <= 5

Но такие двойной формат выражений не будет работать, например, в данном случае:
Код
// x больше 5 или меньше 0
x > 5 || x < 0


Условные выражения также можно проверять на неверность (false).
! - отрицание
!= - означает, не равно

Код
// x не меньше 0
!(x < 0)

// x не равный 0
x != 0


Код
// x больше 0 меньше 2
x > 0 && y < 2

// тоже самое, только с использованием отрицания
!(x <= 0 || y >= 2)
// Если x <= 0, значит неверно (false)
// Если y >= 2, значит неверно (false)
// иначе - верно (true), потому что x > 0 и y < 2     


Выражение IF
if - это выражение, которое решает какой из блоков кода нужно выполнять.
Синтаксис:
Код
if ( условие )
{
    // блок кода
}
 

Код
if ( x > 1 )
{
    // данный код будет выполняться, если x больше 1


Вместе c if есть и выражения else / else if:
Код
if ( условие №1 )
{
    // выполняется, если условие №1 верно
}
else if ( условие №2 )
{
    // выполняется если условие №1 неверно
    // и условие №2 верно
}
 

else испольузется, когда выражения if и else if неверны:
Код
if ( условие №1 )
{
    // выполняется, если условие №1 верно
}
else if ( условие №2 )
{
    // выполняется если условие №1 неверно
    // и условие №2 верно
}
else
{
    // выполняется если условие №1 неверно
    // и условие №2 неверно


Циклы
Существует 3 вида циклов, с которыми вы можете работать:
1) while
2) do, while
3) for

Цикл с использованием while будет выполняться, пока условие верно:
Код
while( условие )
{
    // блок кода
}
 

Методика работы:
1. Проверка условия.
2. Если верно - выполнение блока кода, если нет - выход из цикла.
3. Возвращение к пункту 1.

Цикл с do, while почти идентичен циклу с while:
Код
do
{
    // блок кода
}
while( условие ) 

Методика работы:
1. Выполнение блока кода.
2. Проверка условия.
3. Если верно выполнение блока кода, если нет - выход из цикла.
3. Возвращение к пункту 2.

Цикл for более сложный, чем другие:
Код
for (инициализация; условие; увеличение/уменьшение)
{
    // блок кода

Методика работы:
1. Выполнение инициализации.
2. Если условие верно - выполнять блок кода, если не верно - выход из цикла.
3. Выполнение блока кода.
4. Выполнение увеличения/уменьшения переменной-индекса.
5. Возвращение к пункту №2.

Пример, цикл от 1 до 5:
Код
for( new i = 1; i <= 5; i++ ) // i++ увеличивает i на 1
{
    // блок кода


Пример, цикл от 10 до 1:
Код
for( new i = 10; i >= 1; i-- ) // i-- уменьшает i на 1
{
    // блок кода
}
 


Выражение SWITCH
SWITCH выражение используется для сравнения переменной с 2 или больше значениями и выполнения в зависимости от этого действия.
Код
switch (переменная)
{
    case значение1:
    {
        // переменная равняется значение1
    }
    case значение2
    {
        // переменная равняется значение2
    }
    case значение3:
    {
        // переменная равняется значение3
    }
}
 

Если все значения неверны, то используется следующий код:
Код
switch (переменная)
{
    case значение1:
    {
        // переменная равняется значение1
    }
    case значение2
    {
        // переменная равняется значение2
    }
    case значение3:
    {
        // переменная равняется значение3
    }
    default:
    {
        // переменная не равняется значение1, значение2, значение3
    }
}
 


Часть 4. Математические операции.
Основные
1. Сложение
2. Вычитание
3. Умножение
4. Деление

Код
new x = 1, y = 4;

// Сложение
x = y + 1; // x равняется 5

// Вычитание
y = x - 2; // y равняется 3

// Умножение
x = y * 2; // x равняется 6

// Деление
y = 12 / x; // y равняется 2
 


Увеличение/уменьшение
Код
new x = 5;

x *= 10;
// x теперь 50

x -= 10;
// x теперь 40

x /= 2;
// x теперь 20

x += 4;
// x теперь 24
 


Код
new x = 1

x += 1
// x теперь 2

x++
// x теперь 3
// ++ эквивалентно += 1
// также может быть использовано, как:
++x

// Есть отличия между ++переменная и переменная++
// ++переменная увеличивает переменную перед тем, как она будет использована
// и переменная++ увеличивает переменную после того, как она будет использована

new x = 1
new y = x++
// x = 2, y = 1
// x увеличена до 2 после присвоения y

x = 1
y = ++x
// x = 2, y = 2
// x увеличена до 2 перед присвоением y
 


Аналогично и для --:
Код
new x = 1
new y = --x
// x = 0, y = 0

x = 10
y = x--
// x = 9, y = 10
 


Источник: http://amx-x.ru
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя sivabur
сообщение 9.3.2012, 9:40
Сообщение #2


Стаж: 14 лет

Сообщений: 57
Благодарностей: 9
Полезность: 33

Отличная статя если есть еще такии можеш покидать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 9.3.2012, 10:08
Сообщение #3


Иконка группы

Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Здорово, только смысл просто копировать? Можно дать ссылку на кучу таких статей)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 9.3.2012, 10:37
Сообщение #4


Иконка группы

Стаж: 14 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Отлично!
Есть сайт уже как бы для начинающих скриптеров. ссылку дам чуток позже, где-то затерялась :)


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Steven Gerrard
сообщение 9.3.2012, 10:50
Сообщение #5
Стаж: 16 лет

Сообщений: 39
Благодарностей: 7
Полезность: 139

http://amxxmodx.ru
http://amx-x.ru/viewtopic.php?f=9&t=5 (оригинал статьи в оп-посте)
http://www.darktower.su/fouroom/showthread.php?t=5692
http://wiki.alliedmods.net/Ru:Fundamental_...Mod_X_Scripting
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Flash
сообщение 9.3.2012, 10:51
Сообщение #6
Стаж: 14 лет

Сообщений: 793
Благодарности: выкл.

Напишите в сапорт яндексу что есть гугл и им пора закрываться
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sivabur
сообщение 9.3.2012, 12:44
Сообщение #7


Стаж: 14 лет

Сообщений: 57
Благодарностей: 9
Полезность: 33

Если есть кидайте стати на такое же)
Все прочитал все понял, так как знаю хорошо другой язик программирования)


http://amx-x.ru/viewforum.php?f=9 вот что я нашол)

Отредактировал: sivabur, - 9.3.2012, 12:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 4.10.2013, 18:03
Сообщение #8
Стаж: 11 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Код:
public plugin_init() {

get_mapname(map, 255);
if(equal(map, "$1000$") || equal(map, "de_2x2dust") || equal(map, "3d_aim_dust2") || equal(map, "3d_aim_nuke"))
{
return PLUGIN_HANDLED
}
else
...
return PLUGIN_CONTINUE
}


Что не так?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zippel
сообщение 4.10.2013, 18:05
Сообщение #9


Стаж: 15 лет

Сообщений: 918
Благодарностей: 105
Полезность: 1

нафиг ты в init лезеш, в ней надо провести регистрацию скрипта и события, от которого будет отталкиватся твой mapchecker.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 4.10.2013, 18:10
Сообщение #10
Стаж: 11 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Где можно почитать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Surf
сообщение 4.10.2013, 18:15
Сообщение #11


Стаж: 11 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

Цитата(exec1337 @ 4.10.2013, 22:03) *
Код:
public plugin_init() {

get_mapname(map, 255);
if(equal(map, "$1000$") || equal(map, "de_2x2dust") || equal(map, "3d_aim_dust2") || equal(map, "3d_aim_nuke"))
{
return PLUGIN_HANDLED
}
else
...
return PLUGIN_CONTINUE
}


Что не так?


не объявлена переменная map, и 255 многовато размерности для названия карты, 64/128 хватит
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
exec1337
сообщение 4.10.2013, 18:19
Сообщение #12
Стаж: 11 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Цитата(Surf @ 4.10.2013, 20:15) *
не объявлена переменная map, и 255 многовато размерности для названия карты, 64/128 хватит

Код:
new map[256];


Сделал. Вроде как работает :3

Да карт надо много прописать,делаю с запасом.

Отредактировал: exec1337, - 4.10.2013, 18:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Surf
сообщение 4.10.2013, 20:14
Сообщение #13


Стаж: 11 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

Цитата(exec1337 @ 4.10.2013, 22:19) *
Код:
new map[256];


Сделал. Вроде как работает :3

Да карт надо много прописать,делаю с запасом.

Эта переменная хранит только 1 карту в любом случае. Если нужно проверять на большое кол-во карт, то лучше это сделать через массив + цикл

Оптимальный размер переменной "map" можно высчитать так - открыть список всех карт на сервере, найти карту с самым длинным названием, посчитать кол-во символов в названии этой карты и к этому числу прибавить единицу
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
eckoecko
сообщение 4.10.2013, 20:21
Сообщение #14
Стаж: 12 лет

Сообщений: 1705
Благодарностей: 266
Полезность: 0

Surf, верно подметил) Но лучше запастись лишними битами)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 4.10.2013, 20:24
Сообщение #15
Стаж: 11 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Цитата(Surf @ 4.10.2013, 22:14) *
Эта переменная хранит только 1 карту в любом случае. Если нужно проверять на большое кол-во карт, то лучше это сделать через массив + цикл

Оптимальный размер переменной "map" можно высчитать так - открыть список всех карт на сервере, найти карту с самым длинным названием, посчитать кол-во символов в названии этой карты и к этому числу прибавить единицу

Т.е. при перезапуске идёт обработка списка и берётся только одна карта? Так чтоли? Странный приницип. Я и такой метод остановки осилил с третьего раза,такчто мне до граммотного кода :)

А,я думал это размер массива подо все карты...

Это всё знаете из-за чего? А потому-что дуэль на некоторых картах телепортирует в текстуры. Спауны ставить бесполезно. Я пока так и не понял,как же оно выбирает вектора. Нужен скриптер,ибо он что-то знает.

Дак оно ведь работать будет,да? Я вроде бы проверил на домашнем-всё в норме.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 4.10.2013, 21:02
Сообщение #16


Иконка группы

Стаж: 14 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(exec1337 @ 4.10.2013, 20:03) *
Код:
public plugin_init() {

get_mapname(map, 255);
if(equal(map, "$1000$") || equal(map, "de_2x2dust") || equal(map, "3d_aim_dust2") || equal(map, "3d_aim_nuke"))
{
return PLUGIN_HANDLED
}
else
...
return PLUGIN_CONTINUE
}


Что не так?

извращение какое-то )))
я так понимаю речь идет о том, чтобы плагин работал на некоторых картах
так для этого есть стандартные возможности amx

а если и делать проверку в плагине - проще список карт из файла читать и потом уж проверять
в разы меньше писанины получится

Отредактировал: Legenda, - 4.10.2013, 21:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 4.10.2013, 21:14
Сообщение #17
Стаж: 11 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Цитата(Legenda @ 4.10.2013, 23:02) *
извращение какое-то )))
я так понимаю речь идет о том, чтобы плагин работал на некоторых картах
так для этого есть стандартные возможности amx

В том и дело,что этот плагин не останавливается через конфиги карт. Пришлось делать так.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Surf
сообщение 4.10.2013, 22:23
Сообщение #18


Стаж: 11 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

Цитата(exec1337 @ 5.10.2013, 0:24) *
Т.е. при перезапуске идёт обработка списка и берётся только одна карта? Так чтоли? Странный приницип. Я и такой метод остановки осилил с третьего раза,такчто мне до граммотного кода :)

А,я думал это размер массива подо все карты...

Это всё знаете из-за чего? А потому-что дуэль на некоторых картах телепортирует в текстуры. Спауны ставить бесполезно. Я пока так и не понял,как же оно выбирает вектора. Нужен скриптер,ибо он что-то знает.

Дак оно ведь работать будет,да? Я вроде бы проверил на домашнем-всё в норме.

функция get_mapname(szMapName, len) - записывает в переменную szMapName название текущей карты до len размерности
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cs-portal
сообщение 4.10.2013, 23:20
Сообщение #19
Стаж: 14 лет

Сообщений: 8181
Благодарностей: 2709
Полезность: 0

он просто думал что массив для названий всех карт )) которые он собрался туда вписать, а на самом деле будет происходить перезапись данных в массиве
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 4.10.2013, 23:21
Сообщение #20
Стаж: 11 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

Цитата(Surf @ 5.10.2013, 0:23) *
функция get_mapname(szMapName, len) - записывает в переменную szMapName название текущей карты до len размерности

Работает. Я доволен,но вопрос по поводу векторов открыт.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
4 страниц V   1 2 3 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: