Сергей68
Неуместный юмор
- Сообщения
- 420
- Реакции
- 377
Я то думаю от куда ноги то растутвсе любители Pawn на SA:MP

Оффтоп
foreach - я для тебя какая-то шутка?)

Я то думаю от куда ноги то растутвсе любители Pawn на SA:MP
не совсем. старый enum больше подходит для перечислений (для чего он изначально и создан в нормальных языках). Т.е. просто навешивал обертку поверх инта.Можно всё это и так реализовать на предыдущих версиях SM:
C-подобный:enum { T_Coin, T_Money, T_Gold, T_Total }; int iValues[MAXPLAYERS+1][T_Total]; char sValue[MAXPLAYERS+1][MAX_NAME_LENGTH]; stock void PrintValues(int client) { PrintToChat(client, "Твои монеты, %s: %i", sValue[client], iValues[client][T_Coin]); PrintToChat(client, "Твои деньги, %s: %i", sValue[client], iValues[client][T_Money]); PrintToChat(client, "Твоё золото, %s: %i", sValue[client], iValues[client][T_Name]); }
Сообщения автоматически склеены:
Rabb1t, какие-то в 1.10 ввели, которые в 1.11 вывели.
а тут смотря с какой стороны посмотреть.Не проще ли тогда использовать такую структуру?
C-подобный:enum struct UnusVars { int Coins[MAXPLAYERS+1]; int Money[MAXPLAYERS+1]; // ... void AddCoin(int iCount, int iIndex = -1) { int i; while(i++ < MaxClients) if((iIndex != -1 && i == iIndex) || iIndex == -1) this.Coins[i] += iCount; } void AddMoney(int iCount, int iIndex = -1) { int i; while(i++ < MaxClients) if((iIndex != -1 && i == iIndex) || iIndex == -1) this.Money[i] += iCount; } }
UnusVars ClientsData;
ClientsData.AddCoin(1, iClient);
скорее всего имелось ввиду что с ними нельзя работать как с массивами (обращаться по индексу к свойствам, добавлять, удалять элементы), а работать как с объектами.Больше всего мне нравится вот это предложение в первоисточнике:Note that even though enum structs are actually arrays, for the most part they cannot be used as arrays.
Там постфиксный инкремент, он разве что с нулевой ячейкой не считаетсяИ по-моему цикл не будет обрабатывать игрока в последнем слоте.
Ну там тип "наследование" имеется. Больше смахивает на два недостроенных дома на пару со структурамино тут возникает вопросик. зачем тогда методмапы? тоже самое но без свойств?
я про индекс массива понялскорее всего имелось ввиду что с ними нельзя работать как с массивами (обращаться по индексу к свойствам, добавлять, удалять элементы), а работать как с объектами.
Да, ты прав, что в памяти от этого ничего не изменится (я не уверен, может на капельку повлияет в худшую сторону), но все-таки так удобнее для меня ;)
Точно могу сказать, что так принято на Pawno (только там юзался двумерный массив с енумом), который в SA:MP используется. Там тоже можно создавать массивы переменных, но людям удобнее вот так.
Сообщения автоматически склеены:
Да, это я прекрасно понимаю, просто мне однажды кто-то опытный посоветовал делать MAXPLAYERS+1, чтобы не было ошибок.
Все-таки мысленно мы понимаем, что будем использовать только 64.
Да, способ точно не мой) подправлю. Дело в том, что этот способ был найден уже довольно давно, когда начали появляться варнинги об удалении этой возможности в 1.11 (как видим, нас обманули =( ). Я решил им поделиться, потому что он правда выглядит приятнее.
Да, спасибо за идею, дополню. Просто если бы удалили способ с двумерным массивом и enum, то это была бы единственная такая альтернатива.
Как по мне, то, что можно делать на обычном павне(создавать структуры в перечислениях), то это полное извращение и вырви глаз. Перечисления не для этого придумали и когда я вижу код, где перечисления используются, как структура ака структуры си(enum struct не в счёт, хотя все это просто синтаксический сахар). Ребята, не надо такой фигнёй страдать, используйте вещи только для того, для чего изначально они создавалисьНе знаю, я каждый раз когда пробовал делать двумерные массивы такие с enum, то выдавал варнинг. Загуглил решение и начал писать на таких структурах .-.
А на 1.11 я еще даже ничего не делал)