Ящик с патронами, проблема -
prstallmer - 15.04.2012
Всем привет, помогите советом.
Затеял сделать функцию кидания патронов с последующим их подбирании, как в баттле.
Паблик клавиш
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
В чем здесь может быть косяк?
Re: Ящик с патронами, проблема -
iEnemY - 15.04.2012
packid[playerid] и packsupl[playerid] где то обнуляються, смотри все места где они используются. Да и как то странно, вообще достаточно создать тот же самый ящик с патронами без привязки к айди игрока. Берут и берут патроны, игрок то тут причём.