PDA

Просмотр полной версии : [Вопрос] Проблема с gangzone



gangzone.ini
05.06.2015, 15:58
Столкнулась с такой проблемой:

1. Когда загружаю мод, GangZone грузятся, но не присваивает цвет (присвоение)
2. Когда закрываю мод GangZone сохраняются, но присваивает 0 значени, чем проблема?



enum gi
{
gID,
Float:MinX,
Float:MinY,
Float:MaxX,
Float:MaxY,
gOwner,
};
new GZInfo[104][gi];

public OnPlayerConnect(playerid)

for(new i; i < sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(GZInfo[i][gOwner]));
}


stock LoadGangZone()
{
new iniFile = ini_openFile("gangzone.ini"),
query[35+5*4];
for(new i; i < sizeof(GZInfo); i++)
{
format(query, sizeof(query),"%d", i+1);
ini_getString(iniFile, query, query);
sscanf(query, "p<|>ffff", GZInfo[i][MinX], GZInfo[i][MinY], GZInfo[i][MaxX], GZInfo[i][MaxY]);
//printf("%i)%s\n%f|%f|%f|%f|%d\n", i, query, GZInfo[i][MinX], GZInfo[i][MinY], GZInfo[i][MaxX], GZInfo[i][MaxY], GZInfo[i][gOwner]);
GZInfo[i][gID] = GangZoneCreate(GZInfo[i][MinX], GZInfo[i][MinY], GZInfo[i][MaxX], GZInfo[i][MaxY]);
}
ini_closeFile(iniFile);
printf("Загружено %d гангзон", sizeof(GZInfo));
}


stock SaveGangZone()
{
new iniFile = ini_openFile("gangzone.ini"),
query[35+5*4],
key_string[3];
for(new i; i < sizeof(GZInfo); i++)
{
format(key_string, sizeof(key_string),"%d", i+1);
format(query, sizeof(query),"%f|%f|%f|%f|%d", GZInfo[i][MinX], GZInfo[i][MinY], GZInfo[i][MaxX], GZInfo[i][MaxY], GZInfo[i][gOwner]);
ini_setString(iniFile, key_string, query);
}
ini_closeFile(iniFile);
printf("Сохранено %d гангзон", sizeof(GZInfo));
}


stock GetGangZoneColor(gangzonex)
{
new zx;
switch(GZInfo[gangzonex][gOwner])
{
case 0: zx = 0xFFFFFFAA;
case 1: zx = 0x009900AA;//grove
case 2: zx = 0xCC00FFAA;//ballas
case 3: zx = 0x00b4e1AA;//aztecas
case 4: zx = 0xffcd00AA;//vagos
case 5: zx = 0x6666ffAA;//rifa
}
return zx;
}

Daniel_Cortez
05.06.2015, 16:41
1. Когда загружаю мод, GangZone грузятся, но не присваивает цвет (присвоение)
Ну да, вы же не считываете из файла ID банды.


2. Когда закрываю мод GangZone сохраняются, но присваивает 0 значени, чем проблема?
В том, что сервер не ожидает, пока выполнится всё содержимое OnGameModeExit (а именно оттуа у вас и вызывается сохранение гангзон, так?)
Решение этой проблемы уже обсуждалось здесь (http://pro-pawn.ru/showthread.php?12289).

И, скоее всего, ещё один пример этой проблемы можно увидеть здесь (http://pro-pawn.ru/showthread.php?12171). Проблема только в том, что топикстартер ничего не хочет слышать по этому поводу, отговариваясь, что у него MySQL, а не файлы и это якобы никак не связано с его случаем (хотя проблема на самом деле должна быть одна и та же - сервер не успевает вовремя сохранить данные и сохранение происходит, когда экземпляр AMX уже выгружен и вся область памяти, которая под него отводилась, теперь деинициализирована нулями - отсюда и нули в сохраняемых данных).

gangzone.ini
05.06.2015, 17:17
1. Сделала команду с сохранением GZ, все ровно присваивает 0 значение, всего GZ 104, 1-99 присваивается 0, а 100-104 остаётся.

$continue$
05.06.2015, 18:21
Я не силен в файлах но, OnPlayerSpawn нужно добавить переменную с условием на то что игрок спавниться 1 раз


for(new i; i < sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(GZInfo[i][gOwner]));
printf("GangZoneShowForPlayer('%d', '%d', '%06x')", playerid, GZInfo[i][gID], GetGangZoneColor(GZInfo[i][gOwner]));
}



stock LoadGangZone()
{
new iniFile = ini_openFile("gangzone.ini"),
query[35+5*4];
for(new i; i < sizeof(GZInfo); i++)
{
format(query, sizeof(query),"%d", i+1);
ini_getString(iniFile, query, query);
sscanf(query, "p<|>ffffi", GZInfo[i][MinX], GZInfo[i][MinY], GZInfo[i][MaxX], GZInfo[i][MaxY], GZInfo[i][gOwner]);
GZInfo[i][gID] = GangZoneCreate(GZInfo[i][MinX], GZInfo[i][MinY], GZInfo[i][MaxX], GZInfo[i][MaxY]);
printf("GangZoneCreate('%d')", GZInfo[i][gID]);
}
ini_closeFile(iniFile);



Накидал проверку:
Глобально


new bool: first_time_spawn[MAX_PLAYERS char] = {false, ...};

OnPlayerSpawn


if(first_time_spawn{playerid} == false)
{
for(new i; i < sizeof(GZInfo); i++)
{
GangZoneShowForPlayer(playerid, GZInfo[i][gID], GetGangZoneColor(GZInfo[i][gOwner]));
}
first_time_spawn{playerid} = true;
}

OnPlayerConnect


if(first_time_spawn{playerid} == true)
{
first_time_spawn{playerid} = false;
}