Смещение ID пикапа -
Frapsy - 10.02.2013
Такая ситуация. На сервере стоит система пикапов для входов/выходов. Происходит, так сказать, смещение ID пикапа. То есть, создается он с идом 150, OnPlayerPickUpPickup срабатывает несколько раз возвращая 150 ид, а затем ид смещается и коллбэк возвращает уже 22. Что может способствовать такому поведению идов?
PHP код:
public OnPlayerPickUpPickup(playerid, pickupid) {
for(new i = 1; i < sizeof(pInfo); i++) {
if(pickupid == pInfo[i][pID]) {
SetPlayerInterior(playerid,pInfo[i][Interior]);
SetPlayerPos(playerid,pInfo[i][ExX],pInfo[i][ExY],pInfo[i][ExZ]);
SetPlayerFacingAngle(playerid,pInfo[i][ExA]);
SetPlayerVirtualWorld(playerid,pInfo[i][World]);
switch(pInfo[i][ShopName]) {
case 1: SetPlayerShopName(playerid,"FDPIZA");
case 2: SetPlayerShopName(playerid,"FDBURG");
case 3: SetPlayerShopName(playerid,"FDCHICK");
}
SetCameraBehindPlayer(playerid);
return 1;
}
}
return 1;
}
// создание
pInfo[i][pID] = CreatePickup(pInfo[i][PickupID],23,pInfo[i][PosX],pInfo[i][PosY],pInfo[i][PosZ],pInfo[i][pWorld]);
Re: Смещение ID пикапа -
stabker - 10.02.2013
Это все зависит от правильности работы вашей динамической системы
Re: Смещение ID пикапа -
Frapsy - 10.02.2013
Она наверно не динамическая, слово не верное подобрал
Вот массив и загрузка данных.
PHP код:
enum EnterExit {
PickupID,
pWorld,
Float:PosX,
Float:PosY,
Float:PosZ,
Float:ExX,
Float:ExY,
Float:ExZ,
Float:ExA,
Interior,
World,
ShopName,
pID
}
new pInfo[MAX_EE][EnterExit];
//***************
public OnGameModeInit() {
mysql_function_query(mysqlid,"SELECT * FROM `enterexit`",true,"LoadEnterExit","d",mysqlid);
// ....
}
forward LoadEnterExit();
public LoadEnterExit() {
cache_get_data(rows,fields);
printf("ROWS: %d",rows);
for(new i = 1; i < rows+1; i++) {
cache_get_row(i,1,qResult); sscanf(qResult,"i",pInfo[i][PickupID]);
cache_get_row(i,2,qResult); sscanf(qResult,"i",pInfo[i][pWorld]);
cache_get_row(i,3,qResult); sscanf(qResult,"f",pInfo[i][PosX]);
cache_get_row(i,4,qResult); sscanf(qResult,"f",pInfo[i][PosY]);
cache_get_row(i,5,qResult); sscanf(qResult,"f",pInfo[i][PosZ]);
cache_get_row(i,6,qResult); sscanf(qResult,"f",pInfo[i][ExX]);
cache_get_row(i,7,qResult); sscanf(qResult,"f",pInfo[i][ExY]);
cache_get_row(i,8,qResult); sscanf(qResult,"f",pInfo[i][ExZ]);
cache_get_row(i,9,qResult); sscanf(qResult,"f",pInfo[i][ExA]);
cache_get_row(i,10,qResult); sscanf(qResult,"i",pInfo[i][Interior]);
cache_get_row(i,11,qResult); sscanf(qResult,"i",pInfo[i][World]);
cache_get_row(i,12,qResult); sscanf(qResult,"i",pInfo[i][ShopName]);
pInfo[i][pID] = CreatePickup(pInfo[i][PickupID],23,pInfo[i][PosX],pInfo[i][PosY],pInfo[i][PosZ],pInfo[i][pWorld]);
printf("NewID: %d",pInfo[i][pID]);
pickups++;
}
return 1;
}
Re: Смещение ID пикапа -
eakwarp - 10.02.2013
Явно что-то кроме этого кода работает с пикапами, причем видимо криво.
Re: Смещение ID пикапа -
Frapsy - 10.02.2013
Именно работа с пикапами только на входах/выходах, пикап смены одежды и информационный. Остальные стоят просто как показатели (дома,бизнесы).
Re: Смещение ID пикапа -
DrSlett - 10.02.2013
Пикапы входа/выхода создаются первее чем пикапы домов, смены одежды и т.д.?
Re: Смещение ID пикапа -
Frapsy - 10.02.2013
Да, должно быть так, но создаваться они начинают только с 55 ида. Наверное из-за запроса и обращения к стоку.
Re: Смещение ID пикапа -
stabker - 10.02.2013
Если один из пикапов, ид которого хранится для входа в бизы, дома, удаляется, а потом снова создается, вы обновляете значение переменной на текущий ид пикапа? Кроме этого, если вы просто удаляете пикап, ид которого сохранен, не забывайте присваивать переменной невалидное значение, т.к. при создании какого-то другого пикапа, исходя из вашего скрипта входа в биз, он будет работать не так, как нужно.