Смещение ID пикапа
#1

Такая ситуация. На сервере стоит система пикапов для входов/выходов. Происходит, так сказать, смещение ID пикапа. То есть, создается он с идом 150, OnPlayerPickUpPickup срабатывает несколько раз возвращая 150 ид, а затем ид смещается и коллбэк возвращает уже 22. Что может способствовать такому поведению идов?

PHP код:
public OnPlayerPickUpPickup(playeridpickupid) { 
    for(new 
1sizeof(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 
1SetPlayerShopName(playerid,"FDPIZA"); 
                case 
2SetPlayerShopName(playerid,"FDBURG"); 
                case 
3SetPlayerShopName(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]); 
Reply
#2

Это все зависит от правильности работы вашей динамической системы
Reply
#3

Она наверно не динамическая, слово не верное подобрал

Вот массив и загрузка данных.
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 
1rows+1i++) {
        
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;

Reply
#4

Явно что-то кроме этого кода работает с пикапами, причем видимо криво.
Reply
#5

Именно работа с пикапами только на входах/выходах, пикап смены одежды и информационный. Остальные стоят просто как показатели (дома,бизнесы).
Reply
#6

Пикапы входа/выхода создаются первее чем пикапы домов, смены одежды и т.д.?
Reply
#7

Да, должно быть так, но создаваться они начинают только с 55 ида. Наверное из-за запроса и обращения к стоку.
Reply
#8

Если один из пикапов, ид которого хранится для входа в бизы, дома, удаляется, а потом снова создается, вы обновляете значение переменной на текущий ид пикапа? Кроме этого, если вы просто удаляете пикап, ид которого сохранен, не забывайте присваивать переменной невалидное значение, т.к. при создании какого-то другого пикапа, исходя из вашего скрипта входа в биз, он будет работать не так, как нужно.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)