Участник
Пользователь
- Сообщения
- 893
- Реакции
- 149
- Помог
- 25 раз(а)
Здравствуйте.
Столкнулся с проблемой, что в json не хотят работать цвета меню (\r, \y, \w).
Если их напрямую использовать - плагин будет кидать ошибочные логи.
Попробовал реализовать через replace_string - результата ноль.
Сам код:
Цвета просто не считывает.
Кто знает, что может быть не так?
Столкнулся с проблемой, что в json не хотят работать цвета меню (\r, \y, \w).
Если их напрямую использовать - плагин будет кидать ошибочные логи.
Попробовал реализовать через replace_string - результата ноль.
Сам код:
C++:
#include <AmxModX>
#include <AmxMisc>
#include <KnifeSystem>
#include <ReApi>
#include <JSON>
#include <ZombiePlague>
#define IsNullString(%0) bool:(%0[0] == EOS)
new Array:g_aKnifeData;
public plugin_init() {
register_plugin(
.plugin_name = "[CSO] Knife: Api",
.version = "1.0 beta",
.author = "ImmortalAmxx"
);
}
public plugin_precache() {
g_aKnifeData = ArrayCreate(eKnifeData);
@LoadData();
}
@LoadData() {
new szConfigsDir[MAX_CONFIG_PATH_LENGHT];
get_localinfo("amxx_configsdir", szConfigsDir, charsmax(szConfigsDir));
strcat(szConfigsDir, fmt("/plugins/Menu/KnifeMenu.json"), charsmax(szConfigsDir));
if(!file_exists(szConfigsDir)) {
set_fail_state("ModelSystem: Invalid open file: ^"%s^"", szConfigsDir);
return;
}
new JSON: JSON_Handle = json_parse(szConfigsDir, true);
if(JSON_Handle == Invalid_JSON) {
set_fail_state("ModelSystem: Invalid read file: ^"%s^"", szConfigsDir);
return;
}
new iJsonSize = json_object_get_count(JSON_Handle);
if(!iJsonSize) {
json_free(JSON_Handle);
set_fail_state("ModelSystem: File ^"%s^" is empty.", szConfigsDir);
return;
}
new KnifeData[eKnifeData], szBuffer[MAX_INFO_LENGTH];
new JSON: JSON_KnifeSize = Invalid_JSON;
new JSON: JSON_KnifeArray = Invalid_JSON;
new iJsonFlagSize;
for(new i = 0; i < iJsonSize; i++) {
json_object_get_name(JSON_Handle, i, szBuffer, charsmax(szBuffer));
if(IsNullString(szBuffer) || szBuffer[0] == '#') {
continue;
}
if(equali(szBuffer, "knifes")) {
JSON_KnifeSize = json_object_get_value(JSON_Handle, szBuffer);
if(JSON_KnifeSize == Invalid_JSON) {
continue;
}
iJsonFlagSize = json_array_get_count(JSON_KnifeSize);
replace_string(szBuffer, charsmax(szBuffer), "!r", "\r");
replace_string(szBuffer, charsmax(szBuffer), "!w", "\w");
replace_string(szBuffer, charsmax(szBuffer), "!y", "\y");
for(new j = 0; j < iJsonFlagSize; j++) {
JSON_KnifeArray = json_array_get_value(JSON_KnifeSize, j);
if(JSON_KnifeArray != Invalid_JSON) {
if(json_object_has_value(JSON_KnifeArray, "name", JSONString)) {
json_object_get_string(JSON_KnifeArray, "name", KnifeData[NAME], PLATFORM_MAX_PATH - 1);
}
if(json_object_has_value(JSON_KnifeArray, "viewmodel", JSONString)) {
json_object_get_string(JSON_KnifeArray, "viewmodel", KnifeData[MODELS][MODEL_V], PLATFORM_MAX_PATH - 1);
if(file_exists(KnifeData[MODELS][MODEL_V])) {
precache_model(KnifeData[MODELS][MODEL_V]);
}
else {
log_amx("No Model Found: %s", KnifeData[MODELS][MODEL_V]);
}
}
if(json_object_has_value(JSON_KnifeArray, "playermodel", JSONString)) {
json_object_get_string(JSON_KnifeArray, "playermodel", KnifeData[MODELS][MODEL_P], PLATFORM_MAX_PATH - 1);
if(file_exists(KnifeData[MODELS][MODEL_P])) {
precache_model(KnifeData[MODELS][MODEL_P]);
}
else {
log_amx("No Model Found: %s", KnifeData[MODEL_P]);
}
}
if(json_object_has_value(JSON_KnifeArray, "flag", JSONString)) {
json_object_get_string(JSON_KnifeArray, "flag", KnifeData[ACCESS], PLATFORM_MAX_PATH - 1);
}
if(json_object_has_value(JSON_KnifeArray, "damage", JSONNumber)) {
KnifeData[ATTRIB][DAMAGE] = json_object_get_real(JSON_KnifeArray, "damage")
}
else KnifeData[ATTRIB][DAMAGE] = 1.0;
if(json_object_has_value(JSON_KnifeArray, "speed", JSONNumber)) {
KnifeData[ATTRIB][SPEED] = json_object_get_real(JSON_KnifeArray, "speed")
}
else KnifeData[ATTRIB][SPEED] = 280.0;
if(json_object_has_value(JSON_KnifeArray, "gravity", JSONNumber)) {
KnifeData[ATTRIB][GRAVITY] = json_object_get_real(JSON_KnifeArray, "gravity")
}
else KnifeData[ATTRIB][GRAVITY] = 1.0;
ArrayPushArray(g_aKnifeData, KnifeData);
}
json_free(JSON_KnifeArray);
}
}
}
json_free(JSON_Handle);
}
public plugin_natives() {
register_native("amxx_get_knife_info", "@Native_GetKnifeInfo");
register_native("amxx_get_knife_arraysize", "@Native_GetArraySize");
}
@Native_GetKnifeInfo(iPlugin, iParam) {
enum {
arg_key = 1,
arg_array
}
new iKey = get_param(arg_key), aData[eKnifeData];
ArrayGetArray(g_aKnifeData, iKey, aData);
return set_array(arg_array, aData, eKnifeData);
}
@Native_GetArraySize(iPlugin, iParam) {
return ArraySize(g_aKnifeData);
}
Кто знает, что может быть не так?