15.04.2012, 13:04
Всем привет, помогите советом.
Затеял сделать функцию кидания патронов с последующим их подбирании, как в баттле.
Паблик клавиш
Паблик OnPlayerPickUpPickup
При запуске сервера работает как часики, однако спустя некоторое время перестает
правильно определять игрока, а соответсвенно созданный для него пикап с патронами
Было: *playerid=8, i=8, packid=356, packsupl=22
Становится: *playerid=8, i=0, packid=0, packsupl=0
В чем здесь может быть косяк?
Затеял сделать функцию кидания патронов с последующим их подбирании, как в баттле.
Паблик клавиш
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); }
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
В чем здесь может быть косяк?