Помощь со структурой

Сообщения
58
Реакции
25
Помог
4 раз(а)
Добрый день господа.

Нужно ваше авторитетное мнение. Решил самолично написать плагин для выдачи различных бонусов по флагам. Но возник вопрос по организации структуры, в каком виде всё это лучше использовать:dntknw: Задается всё тремя параметрами enum {BonusType, Value, Flag}. Можно, конечно, создать единый массив и для каждого конкретного случая пробегаться по нему в поисках нужного бонуса, но может есть более изящные варианты решения?
 
Последнее редактирование:
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
привет, json :good2:
21 Окт 2019
мона прикрутить
 

d3m37r4

111111
Сообщения
1,429
Реакции
1,169
Помог
10 раз(а)
wellasgood, чем хранение в обычных конфигурационных файликах не угодило? в амхх готовый парсер cfg/ini есть.
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
просто предложение.
21 Окт 2019
Я видел как подобное реализовали хорошо на json.
 
Сообщения
58
Реакции
25
Помог
4 раз(а)
wellasgood, Возможно не совсем правильно меня понял. Интересует не в каком виде будут храниться данные, а каким образом их лучше использовать в плагине, в виде какой структуры;)
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
ничего непонятно из первого поста, покажи фулл код или распиши подробно задачу
 
Сообщения
1,017
Реакции
819
Помог
10 раз(а)
Мне сто раз говорили не заморачивайся, а я все ровно сижу сутками над визуализацией кода думаю, нахер бы это все, потому и тебе скажу, та структура, что есть у тебя - я лично понял, если будет работать должным образом, значит все в порядке. Имхо.
 
Сообщения
58
Реакции
25
Помог
4 раз(а)
Denzer, Ну допустим так. Есть массив, в котором хранятся различные типы бонусов с их значениями. И когда необходимо, бегаем по массиву ищем нужный тип бонуса и выдаем. Пока только до такого додумался. Может кто-то предложит получше идею для реализации
Код:
#include <amxmodx>
#include <reapi>

new const PLUGIN_NAME[] = "Bonus System";
new const PLUGIN_VERSION[] = "0.0.1";
new const PLUGIN_AUTHOR[] = "Xramer";

#define CONFIG_FILE "addons/amxmodx/configs/bonus.ini"
#define BONUS_COUNT ArraySize(g_arrData)

enum {
    bonus,
    maps
}

enum {
    moneyfrag,
    helth
}


enum _:DATA{
    Type,
    Value,
    Flag[32]
}

new Array:g_arrData
new g_iCurrentSection

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
    RegisterHookChain(RG_CSGameRules_PlayerKilled, "CSGameRules_PlayerKilled", true)

    g_arrData = ArrayCreate(DATA);
    new INIParser:hParser = INI_CreateParser();
    INI_SetReaders(hParser, "parse_key_value", "parse_new_section");
    INI_ParseFile(hParser, CONFIG_FILE);
    INI_DestroyParser(hParser);

}

public bool:parse_new_section(hParser, const szSection[])
{
    if (equali(szSection, "bonus"))
    {
        g_iCurrentSection = bonus;
        return true;
    }
        g_iCurrentSection = -1;
        return false;
}

public bool:parse_key_value(hParser, const szValue[]){
    static arrData[DATA]
    static szType[32], szValue[5], szFlag[32];
    if (g_iCurrentSection == bonus){
        parse(szValue, szType, charsmax(szType), szValue, charsmax(szValue), szFlag, charsmax(szFlag));
        if(equali(szType,"moneyfrag")){
            arrData[Type] = moneyfrag;
            arrData[Value] = str_to_num(szValue);
            arrData[Flag] = szFlag
            ArrayPushArray(g_arrData, arrData)
        }
        return true;

    }

    return false;
}

public CSGameRules_PlayerKilled(const victim, const killer)
{

    static arrData[DATA]

    for(new i; i < BONUS_COUNT; i++){
        ArrayGetArray(g_arrData, i, arrData)

        if(arrData[Type] == moneyfrag){
            if(get_user_flags(killer) & read_flags(arrData[Flag]))
                rg_add_account(killer, get_member(killer, m_iAccount) + arrData[Value])
        }
    }

}
21 Окт 2019
Javekson, Вот и я сижу голову ломаю)) работать то будет по-любому, но хочется услышать мнения других людей, может как-то более "красиво" всё это можно оформить. Если есть возможность сделать лучше, думаю надо пытаться так делать, дабы хоть как-то развивать свои скиллы в этой области?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу