the timer is running through time
#1

The timer is invoked through time from a particular point code
Code:
Код:
stock CarryUP(playerid, job)
{
	KillTimer(CarryTimer[playerid]);
	CarryTimer[playerid] = SetTimerEx("_CarryUP", 800, false, "ii", playerid, job);
	MyApplyAnimation(playerid, "CARRY", "liftup", 4.1, 0, 0, 0, 0, 0);
}

Public: _CarryUP(playerid, job)
{
	MySetPlayerSpecialAction(playerid, SPECIAL_ACTION_CARRY);
	if(job == 1)		SetPlayerAttachedObject(playerid, ATTACH_SLOT_JOB, 2060, 1, 0.044, 0.36, -0.049, 0.0, 90.0, 0.0);
	else if(job == 2)	SetPlayerAttachedObject(playerid, ATTACH_SLOT_JOB, 2969, 1, 0.009, 0.344, -0.024, 0.0, 90.0, 0.0);
	else if(job == 3)	SetPlayerAttachedObject(playerid, ATTACH_SLOT_JOB, 1271, 1, 0.311, 0.579, 0.0, 0.0, 90.0, 0.0);		// Подработка грузчиком на базе дальнобойщиков
	else if(job == 4)	SetPlayerAttachedObject(playerid, ATTACH_SLOT_JOB, FARM_GRASS_OBJECT, 17, -0.074, 0.35, 0.065, 331.51, 271.87, 321.75, 0.831, 1.0, 0.748);	//	работа на ферме
	return true;
}
There are many calls these functions work correctly,
however, in one system there were problems:

Code In OnPlayerEnterDynamicArea(playerid, areaid):
Код:
		if(IsPlayerInAnyVehicle(playerid) == 0)
		{
			foreach(Player, i)
			{	//	хуй
				if(areaid != g_FarmVehiclePoint[i])	continue;
			    new vehicleid = g_FarmPlayerVID[i];
			    new farmid = 0;
			    if(GetVehicleBoot(vehicleid) == false)
			    {
			        return SendClientMessage(playerid, COLOR_GREY, "Ошибка: Кузов закрыт, откройте его командой /open.");
			    }
			   	new Float:dist = GetDistanceFromMeToPoint(playerid, Arr3<FarmZones[farmid][fzStock]>);
				if(g_FarmPlayerGrass{playerid})
				{
				    if(dist < 10.0)	return true;
			        if(g_FarmVehicleGrass[vehicleid] >= MAX_VEHICLE_GRASS)
			        {
			            return ShowPlayerHint(playerid, "~y~КYЗОВ ЗАПОЛНЕН~n~~w~Используйте ~y~/drop~w~, чтобы положить траву на землю");
			        }
			        g_FarmVGrassObjects[vehicleid][ g_FarmVehicleGrass[vehicleid] ] = CreateDynamicObject(FARM_GRASS_OBJECT, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
			        if(g_FarmVehicleGrass[vehicleid] < MAX_VEHICLE_GRASS / 2)
					{
						AttachDynamicObjectToVehicle(g_FarmVGrassObjects[vehicleid][ g_FarmVehicleGrass[vehicleid] ], vehicleid, 0.0, -0.8 - (0.5 * g_FarmVehicleGrass[vehicleid]), 0.2, 0.5, 0.5, 0.5);
					}
					else
					{
					    AttachDynamicObjectToVehicle(g_FarmVGrassObjects[vehicleid][ g_FarmVehicleGrass[vehicleid] ], vehicleid, 0.0, -0.8 - (0.5 * (g_FarmVehicleGrass[vehicleid] - MAX_VEHICLE_GRASS / 2)), 0.5, 0.5, 0.5, 0.5);
					}
					_CarryDown(playerid);
	                FarmPlayer[playerid] = 0;
	                g_FarmPlayerGrass{playerid} = 0;
					if(++g_FarmVehicleGrass[vehicleid] == MAX_VEHICLE_GRASS)
					{
				    	SendClientMessage(i, COLOR_LIGHTGREEN, "> Кузов заполнен, отвезите урожай на склад фермы и разгрузите его.");
	                    FarmDeleteVPoint(i);
					}
				}
				else if(g_FarmVehicleGrass[vehicleid] > 0 && dist < 10.0)
				{
					if(--g_FarmVehicleGrass[vehicleid] == 0)	FarmDeleteVPoint(i);
				    DestroyDynamicObject(g_FarmVGrassObjects[vehicleid][ g_FarmVehicleGrass[vehicleid] ]);
	                g_FarmPlayerGrass{playerid} = 1;
					FarmPlayer[playerid] = farmid;
					CarryUP(playerid, 4);
	                //gPickupTime[playerid] = 0;
				}
				return true;
			}
		}
and OnPlayerPickUpDynamicPickup:
Код:
for(new f = 0; f < sizeof(FarmInfo); f++)
		{
			if(FarmInfo[f][fPickup] == pickupid)
			{
				if(f == FarmPlayer[playerid] && g_FarmPlayerGrass{playerid})
				{	//  Farm
				    CarryDown(playerid);
					//GivePlayerEXPInTime(playerid, 4);		
					PlayerInfo[playerid][pWage] += PRICE_FARMER * 0.735;	// Доставка единицы посева
                    g_FarmPlayerGrass{playerid} = 0;
                    FarmPlayer[playerid] = 0;
                    gPickupTime[playerid] = 3;
				}
			}
			else if(FarmInfo[f][fStatus] == FSTATUS_GATHER)
			{
				for(new p = 0; p < sizeof(FarmGrassObjects[]); p++)
			    {
			        if(pickupid == FarmGrassObjects[f][p])
					{
					    if(g_FarmPlayerGrass{playerid}) return true;
						DestroyDynamicPickup(FarmGrassObjects[f][p]), FarmGrassObjects[f][p] = 0;
						CarryUP(playerid, 4);
						g_FarmPlayerGrass{playerid} = 1;
						FarmPlayer[playerid] = f;
						if(++FarmInfo[f][fHarvest] == FarmInfo[f][fMaxCount])
						{
							SendFarmMessage(f, 300.0, COLOR_LIGHTGREEN, "> Урожай собран, можно приступать к новому засеиванию поля!");
							FarmInfo[f][fStatus] = FSTATUS_NONE;
		                	FarmInfo[f][fHarvest] = 0;
		                	FarmInfo[f][fCount] = 0;
						}
						return FarmUpdate3D(f);
					}
			    }
			}
		}
After a time not called _CarryUP timer
There is no connection between the moments when the call when it is not - not found
Broke my head already

I hope that you understand at least something of my sludge English
Thx
Reply
#2

So far, the conclusion is that the timer is not working properly in some code points.

Forgot to add that the timer can be triggered by an indefinite period, for example 10-20 seconds or more
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)