Ящик с патронами, проблема
#1

Всем привет, помогите советом.
Затеял сделать функцию кидания патронов с последующим их подбирании, как в баттле.

Паблик клавиш
Code:
if((newkeys==KEY_FIRE) && pPack[playerid] > 0 && !IsPlayerInAnyVehicle(playerid) && GetPVarInt(playerid, "pack") == 1 && GetPlayerWeapon(playerid) == 0) {
      //DestroyPickup(packid[playerid]);
      DestroyPickup(packid[playerid]);
      ApplyAnimation(playerid,"GRENADE","WEAPON_throw",4.1,0,0,0,0,800,1);
      if(PlayerInfo[playerid][pJob] != 16) { RemovePlayerAttachedObject(playerid,4); pPack[playerid]=0;   SetPVarInt(playerid, "pack", 0); packsupl[playerid] = 0; return 1; }
      new Float:x,Float:y,Float:z;
      GetPlayerPos(playerid, x, y, z);
      packid[playerid] = CreatePickup(1279, 1, x+0.2, y+1, z+0.2,-1);
      packsupl[playerid] = 22;
      pPack[playerid] = 0;
      packtimer[playerid] = SetTimerEx("GivePack",5000,0,"i",playerid);
      RemovePlayerAttachedObject(playerid,4);
      }
Паблик OnPlayerPickUpPickup
Code:
for(new i; i<GetMaxPlayers();i++)
	{
	if(IsPlayerConnected(i))
		{
		
	    	if (pickupid == packid[i])
			{
                 format(string, sizeof(string), "*playerid=%d, i=%d, packid=%d, packsupl=%d",playerid,i,packid[i],packsupl[i]); //packsupl[i]
			     SendClientMessage(playerid, COLOR_GREY, string);
                 new weapons[13][2];
			    if (playerid == i && i != INVALID_PLAYER_ID)
			    	{
			    	 format(string, sizeof(string), "Âû ïîäîáðàëè ïàòðîíû (ñâîè).");
	                 SendClientMessage(i,COLOR_YELLOW,string);

                     for (new g = 0; g < 13; g++)
                     {
                      GetPlayerWeaponData(playerid, g, weapons[g][0], weapons[g][1]);

                       if(g == 3 && weapons[g][1]>0 && weapons[g][1] < 1000 || g == 2 && weapons[g][1] > 0 && weapons[g][1] < 300) {SetPlayerAmmo(i,weapons[g][0],weapons[g][1]+50); packsupl[i]--;} //packsupl[i] itd..
                       if(g == 4 && weapons[g][1]>0 && weapons[g][1] < 1000 || g == 5 && weapons[g][1]>0 && weapons[g][1] < 600) {SetPlayerAmmo(i,weapons[g][0],weapons[g][1]+80); packsupl[i]--;}
                       if(g == 7 && weapons[g][0] == 37 && weapons[g][1]>0 && weapons[g][1] < 70) {SetPlayerAmmo(i,weapons[g][0],weapons[g][1]+20); packsupl[i]--;}
                       else if(g == 7 && weapons[g][1]>0 && weapons[g][1] < 5) {SetPlayerAmmo(i,weapons[g][0],weapons[g][1]+1); packsupl[i]--;}
                       if(g == 8 && weapons[g][1]>0 && weapons[g][1] < 100) {SetPlayerAmmo(i,weapons[g][0],weapons[g][1]+8); packsupl[i]--;}


                        }
	                  if(packsupl[i] <= 0) DestroyPickup(packid[i]);
	                  return 1;
                    } 

                 else if (playerid != i && i != INVALID_PLAYER_ID)
			    	{
			    	 format(string, sizeof(string), "Âû ïîäîáðàëè ïàòðîíû.");
	                 SendClientMessage(playerid,COLOR_YELLOW,string);
	                 format(string, sizeof(string), "Âàøè ïàòðîíû ïîäîáðàëè (%d).",playerid);
	                 SendClientMessage(i,COLOR_YELLOW,string);

	                 //new weapons[13][2];
                     for (new g = 0; g < 13; g++)
                     {
                      GetPlayerWeaponData(playerid, g, weapons[g][0], weapons[g][1]);

                       if(g == 3 && weapons[g][1]>0 && weapons[g][1] < 1000 || g == 2 && weapons[g][1] > 0 && weapons[g][1] < 300) {SetPlayerAmmo(playerid,weapons[g][0],weapons[g][1]+50);  packsupl[i]--;}
                       if(g == 4 && weapons[g][1]>0 && weapons[g][1] < 1000 || g == 5 && weapons[g][1]>0 && weapons[g][1] < 600) {SetPlayerAmmo(playerid,weapons[g][0],weapons[g][1]+80);  packsupl[i]--;}
                       if(g == 7 && weapons[g][0] == 37 && weapons[g][1]>0 && weapons[g][1] < 70) {SetPlayerAmmo(playerid,weapons[g][0],weapons[g][1]+20);  packsupl[i]--;}
                       else if(g == 7 && weapons[g][1]>0 && weapons[g][1] < 5) {SetPlayerAmmo(playerid,weapons[g][0],weapons[g][1]+1);  packsupl[i]--;}
                       if(g == 8 && weapons[g][1]>0 && weapons[g][1] < 100) {SetPlayerAmmo(playerid,weapons[g][0],weapons[g][1]+8); packsupl[i]--; }


                      }
	                  if(packsupl[i] <= 0) DestroyPickup(packid[i]);
	                  return 1;
                    }
               }
         }
При запуске сервера работает как часики, однако спустя некоторое время перестает
правильно определять игрока, а соответсвенно созданный для него пикап с патронами

Было: *playerid=8, i=8, packid=356, packsupl=22

Становится: *playerid=8, i=0, packid=0, packsupl=0

В чем здесь может быть косяк?
Reply
#2

packid[playerid] и packsupl[playerid] где то обнуляються, смотри все места где они используются. Да и как то странно, вообще достаточно создать тот же самый ящик с патронами без привязки к айди игрока. Берут и берут патроны, игрок то тут причём.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)