Question

kusehsup
Постоянный

Всем привет, когда захожу на сервер, выбираю пункт спавна "Где вышел", телепортирует на координаты 0.0.0.

Мод: AttractRP

Буду рад помощи :$

Share this post


Link to post

10 answers to this question

  • 0
DEST
Maintainer

@Aurum значит не сохраняются координаты, проверь есть ли они в базе

Share this post


Link to post
  • 0
kusehsup
Постоянный
24 минуты назад, DEST сказал:

@Aurum значит не сохраняются координаты, проверь есть ли они в базе

В базе, как таковые значения имеются.

Но, как Вы и сказали, координаты не сохраняются. ( В таблице значений нет ).

Я с мускулом на самом деле не шарю.

Если можете помочь - помогите пожалуйста, что надо - кину.

Share this post


Link to post
  • 0
DEST
Maintainer

@Aurum OnPlayerDisconnect скинь и названия полей в которых должны быть значения

Share this post


Link to post
  • 0
kusehsup
Постоянный
Спойлер

public OnPlayerDisconnect(playerid, reason)
{
	new string1[128];
	switch(reason)
	{
		case 0: strmid(string1, "ошибка", 0, strlen("ошибка"));
		case 1: strmid(string1, "вышел", 0, strlen("Вышел"));
		case 2: strmid(string1, "кик/бан", 0, strlen("кик/бан"));
		default: strmid(string1, "неизвестно", 0, strlen("неизвестно"));
	}
	format(string1, 128, "[A] %s[%d] отключился | IP: %s | Причина: %s.",PI[playerid][pName],playerid,PI[playerid][pIP],string1);
	SendBoxMessage(string1);
    slotUsed{playerid} = false;
    PI[playerid][pOnline] = 0;
    KillTimer(player_timer[playerid]);
    if(PI[playerid][cModel] > 0) Delete3DTextLabel(VehicleLabel[PI[playerid][PlayerCarID]]);
	if(IsPlayerAttachedObjectSlotUsed(playerid, 0)) RemovePlayerAttachedObject(playerid, 0);
	if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, 1);
	if(IsPlayerAttachedObjectSlotUsed(playerid, 2)) RemovePlayerAttachedObject(playerid, 2);
	if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
	if(IsPlayerAttachedObjectSlotUsed(playerid, 4)) RemovePlayerAttachedObject(playerid, 4);
	if(IsPlayerAttachedObjectSlotUsed(playerid, 5)) RemovePlayerAttachedObject(playerid, 5);
	new Query[128];
	format(Query, sizeof(Query), "UPDATE "T_ADMIN" SET timemin='%d' WHERE name='%s' LIMIT 1", AdminInfo[playerid][admTimeMin], GetName(playerid));
	mysql_tquery(dbHandle, Query, "", "");
	if(GetPVarInt(playerid,"DrawFill") > 0) DeletePVar(playerid,"DrawFill");
	if(PI[playerid][PlayerCarID] != INVALID_VEHICLE_ID)
	{
		PI[playerid][cFuel] = Fuel[PI[playerid][PlayerCarID]];
		DestroyVehicle(PI[playerid][PlayerCarID]);
		PI[playerid][PlayerCarID] = INVALID_VEHICLE_ID;
	}
	if(pCuff[playerid][pCuffee] != INVALID_PLAYER_ID && reason == 1)
	{
	    new id = pCuff[playerid][pCuffee];
	    if(id == playerid)
		{
		    new cuffer = pCuff[playerid][pCuffer];
		    new string[128];
			format(string, sizeof(string), "%s вышел при аресте (+30 минут КПЗ)", GetName(playerid));
			SendClientMessageToAll(COLOR_RED, string);
			PI[playerid][pJail] = 4;
			PI[playerid][pJailTime] = 1800;
			PI[playerid][pWanted] = 0;
			pCuff[cuffer][pCuffer] = INVALID_PLAYER_ID;
			pCuff[cuffer][pCuffee] = INVALID_PLAYER_ID;
			pCuff[playerid][pCuffee] = INVALID_PLAYER_ID;
			pCuff[playerid][pCuffer] = INVALID_PLAYER_ID;
		}
		else if(!IsPlayerConnected(id))
		{
		    SetPlayerSpecialAction(id, SPECIAL_ACTION_NONE);
			RemovePlayerAttachedObject(id, 0);
			pCuff[id][pCuffer] = INVALID_PLAYER_ID;
			pCuff[id][pCuffee] = INVALID_PLAYER_ID;
			pCuff[playerid][pCuffee] = INVALID_PLAYER_ID;
			pCuff[playerid][pCuffer] = INVALID_PLAYER_ID;
			SendClientMessage(playerid, COLOR_LIME, "Офицер, надевший на Вас наручники, вышел из игры. Наручники сняты.");
		}
	}
 	if(GetPVarInt(playerid, "arendkey") != -1)
	{
		new v = GetPVarInt(playerid, "arendkey");
		if(ArendInfo[v][aPlayerID] == playerid)
		{
			ArendInfo[v][aPlayerID] = INVALID_PLAYER_ID;
            SetVehicleToRespawn(ArendInfo[v][aID]);
            IsLocked[ArendInfo[v][aID]] = false;
			CarDoorsEx(ArendInfo[v][aID], 0);
		}
    }
//_______________________| Выход с сервера во время работы |____________________
	if(GetPVarInt(playerid, "TruckerJob"))//дальнобойщики
	{
	    DestroyVehicleEx(TruckerCar[playerid]);
	    TruckerCar[playerid] = 0;
		DeletePVar(playerid, "TruckerJobTime");
		DeletePVar(playerid, "TruckerJob");
		DeletePVar(playerid, "TruckerJobRazgruzka");
	}
	if(GetPVarInt(playerid, "InJobVodolaz") == 1)//водолазы
	{
	    KillTimer(Vozduh[playerid]);
	    RemovePlayerAttachedObject(playerid,1);
	    RemovePlayerAttachedObject(playerid,2);
	    RemovePlayerAttachedObject(playerid,8);
        RemovePlayerAttachedObject(playerid,5);
        GiveMoney(playerid,GetPVarInt(playerid,"JobVodolazYashiki")*JOB_CASH_VODOLAZ);// Выдаём деньги
        DeletePVar(playerid,"JobVodolazYashiki");// Удаляем PVar с колличеством вещей
        DeletePVar(playerid,"InJobVodolaz");
        DeletePVar(playerid, "VodolazMeshok1");
        DeletePVar(playerid, "VodolazMeshok2");
        DeletePVar(playerid, "VodolazGoToSklad");
        SetHealth(playerid,100);
	}
	if(GetPVarInt(playerid,"objectcop"))
	{
		DestroyObject(GetPVarInt(playerid,"objectcop"));
		DestroyDynamicArea(Ships[playerid]);
	}
	PlayerDied[playerid] = false;
	drawcapt[playerid] = false;
	SetPlayerSkills(playerid);
 	if(PlayerUseMask[playerid])
	{
        PlayerUseMask[playerid] = false;
		KillTimer(MaskTimer[playerid]);
	}
	if(UseGPS[playerid])
	{
    	DisablePlayerRaceCheckpoint(playerid);
    	UseGPS[playerid] = false;
	}
	if(GetPVarInt(playerid, "PriceBus") > 0)
	{
		PI[playerid][pPayCheck] += GetPVarInt(playerid, "BusMoney");
		if(IsValidDynamic3DTextLabel(BusText3D[playerid])) DestroyDynamic3DTextLabel(BusText3D[playerid]);
		SetVehicleToRespawn(PI[playerid][BusCarID]);
	}
	if(GetPVarInt(playerid, "PriceTaxi") > 0)
	{
		PI[playerid][pPayCheck] += GetPVarInt(playerid, "TaxiMoney");
		if(IsValidDynamic3DTextLabel(TaxiText3D[playerid])) DestroyDynamic3DTextLabel(TaxiText3D[playerid]);
		SetVehicleToRespawn(PI[playerid][TaxiCarID]);
	}
	if(PI[playerid][MechanicCarID] != INVALID_VEHICLE_ID) SetVehicleToRespawn(PI[playerid][MechanicCarID]);
	if(UseWork[playerid] == 2)
	{
	    DeletePVar(playerid, "OldLessSkin");
		UseWork[playerid] = 0;
		DeletePVar(playerid, "LessProgress");
		DeletePVar(playerid, "Derevo");
		DeletePVar(playerid, "LessStatus");
		if(IsPlayerAttachedObjectSlotUsed(playerid, 3)) RemovePlayerAttachedObject(playerid, 3);
		if(IsPlayerAttachedObjectSlotUsed(playerid, 4)) RemovePlayerAttachedObject(playerid, 4);
	}
	
	foreach(new i: Player)
	{
        if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && PI[i][Spectating][0] == playerid)
        {
            GameTextForPlayer(i, "PLAYER DISCONNECTED", 3000, 3);
            cmd_specoff(i, "");
	    }
	}
//_________________| Скрытие текстдравов после выхода игрока |__________________
	for(new i = 0; i < 6; i++) TextDrawHideForPlayer(playerid, Button[i]);
	
    for(new i = 0; i < 10; i++)
	{
		PlayerTextDrawDestroy(playerid, SecurityCode[playerid][i]);
		SecurityCode[playerid][i] = PlayerText:INVALID_TEXT_DRAW;
	}
	for(new i = 0; i < 6; i++)
	{
		PlayerTextDrawDestroy(playerid, StatusWork[playerid][i]);
		StatusWork[playerid][i] = PlayerText:INVALID_TEXT_DRAW;
	}
	for(new i = 0; i < 4; i++)
	{
		PlayerTextDrawDestroy(playerid, GreenZoneText[playerid][i]);
		GreenZoneText[playerid][i] = PlayerText:INVALID_TEXT_DRAW;
	}
	for(new i = 0; i < 7; i++)
	{
	    PlayerTextDrawDestroy(playerid, CaptureTD[playerid][i]);
		CaptureTD[playerid][i] = PlayerText:INVALID_TEXT_DRAW;
	}
	CancelSelectTextDraw(playerid);
//________________________| Сохранение оружия у игрока при выходе |_____________
	new gun_string[56], ammo_string[56], string[256];
	format(gun_string, 56, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
	PI[playerid][pGun][0], PI[playerid][pGun][1], PI[playerid][pGun][2], PI[playerid][pGun][3],
	PI[playerid][pGun][4], PI[playerid][pGun][5], PI[playerid][pGun][6], PI[playerid][pGun][7],
	PI[playerid][pGun][8], PI[playerid][pGun][9], PI[playerid][pGun][10], PI[playerid][pGun][11],
	PI[playerid][pGun][12]);
	
	format(ammo_string, 56, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
	PI[playerid][pAmmo][0], PI[playerid][pAmmo][1], PI[playerid][pAmmo][2], PI[playerid][pAmmo][3],
	PI[playerid][pAmmo][4], PI[playerid][pAmmo][5], PI[playerid][pAmmo][6], PI[playerid][pAmmo][7],
	PI[playerid][pAmmo][8], PI[playerid][pAmmo][9], PI[playerid][pAmmo][10], PI[playerid][pAmmo][11],
	PI[playerid][pAmmo][12]);
	
	format(string, sizeof(string), "UPDATE "T_ACCOUNTS" SET `guns` = '%s',`ammos` = '%s' WHERE `id` = '%i'", gun_string, ammo_string, PI[playerid][pID]);
	mysql_tquery(dbHandle, string, "", "");
//______________________________________________________________________________
	SaveAccount(playerid);
	SetPlayerDataToDefault(playerid);
	return 1;
}

 

Названия полей:

PosX , PosY , PosZ

Edited by Aurum

Share this post


Link to post
  • 0
kusehsup
Постоянный
Спойлер

 


enum pInfo {
...
	Float:PosX,
    Float:PosY,
    Float:PosZ,
    pInt,
    pWorld,
};

forward OnPlayerLogin(playerid, tmp[]);
public OnPlayerLogin(playerid, tmp[])
{
...
	new posx[3];
    new posy[3];
    new posz[3];
    new pint[3];
    new pworld[3];
...
	cache_get_field_content(0,"pInt",pint), PI[playerid][pInt] = strval(pint);
    cache_get_field_content(0,"pWorld",pworld), PI[playerid][pWorld] = strval(pworld);
    cache_get_field_content(0,"PosX",posx), PI[playerid][PosX] = floatstr(posx);
    cache_get_field_content(0,"PosY",posy), PI[playerid][PosY] = floatstr(posy);
    cache_get_field_content(0,"PosZ",posz), PI[playerid][PosZ] = floatstr(posz);
	return 1;
};

stock SaveAccount(playerid)
{
...
	format(src,sizeof(src),"pInt='%d',",PI[playerid][pInt]);
	strcat(query,src,sizeof(query));
	format(src,sizeof(src),"pWorld='%d',",PI[playerid][pWorld]);
	strcat(query,src,sizeof(query));
	format(src,sizeof(src),"PosX='%f',",PI[playerid][PosX]);
	strcat(query,src,sizeof(query));
	format(src,sizeof(src),"PosY='%f',",PI[playerid][PosY]);
	strcat(query,src,sizeof(query));
	format(src,sizeof(src),"PosZ='%f',",PI[playerid][PosZ]);
	strcat(query,src,sizeof(query));
	return 1;
}

stock SavePos(playerid)
{
    new Float:X;
    new Float:Y;
    new Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    PI[playerid][PosX] = X;
    PI[playerid][PosY] = Y;
    PI[playerid][PosZ] = Z;
    PI[playerid][pInt] = GetPlayerInterior(playerid);
    PI[playerid][pWorld] = GetPlayerVirtualWorld(playerid);
    SaveAcc();
    return true;
}

stock SetPos(playerid)
{
    SetPlayerInterior(playerid, PI[playerid][pInt]);
    SetPlayerVirtualWorld(playerid, PI[playerid][pWorld]);
    SetPlayerPos(playerid, PI[playerid][PosX],PI[playerid][PosY],PI[playerid][PosZ]);
    return true;
}

 

Кажется тута все)

Edited by Aurum

Share this post


Link to post
  • 0
kusehsup
Постоянный
3 минуты назад, DEST сказал:

@Aurum где SavePos вызывается? 

А вот и оно. Нигде!

Я так подозреваю, вызывать сток при отключении игрока?

Share this post


Link to post
  • 0
kusehsup
Постоянный
1 час назад, DEST сказал:

@Aurum где SavePos вызывается? 

И все-таки не получается. 

Координаты в базу не записываются.

Share this post


Link to post
  • 0
DEST
Maintainer

@Aurum и не будет получаться, курим wiki.sa-mp.com: 

Цитата

Некоторые функции могут работать некорректно при использовании в этом обратном вызове, потому что когда функция вызывается игрок уже отключен. Это означает, что вы не можете получить однозначную информацию от таких функций, как GetPlayerIp и GetPlayerPos.

http://wiki.sa-mp.com/wiki/OnPlayerDisconnect_RU

Соответственно вызывать нужно в секундном таймере. И если SaveAcc() выполняет полное сохранение аккаунта, то его лучше будет убрать из стока SavePos. 

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • grizly57a
      By grizly57a
      1 захожу на сервер и не мой хост хотя в сервер коннекте я указал все свое
      2 выкидывает через секунду
      3 пишет Loading filterscript 'voice.amx'...
      [15:50:18] No collision data found.

      ----------
      Loaded log file: "server_log.txt".
      ----------
      SA-MP Dedicated Server
      ----------------------
      v0.3.7-R2, (C)2005-2015 SA-MP Team
      [15:50:16] weburl = "www.sa-mp.com"  (string)
      [15:50:16] 
      [15:50:16] Server Plugins
      [15:50:16] --------------
      [15:50:16]  Loading plugin: crashdetect.so
      [15:50:16]   CrashDetect plugin 4.19.4
      [15:50:16]   Loaded.
      [15:50:16]  Loading plugin: pawncmd.so
      [15:50:17] Pawn.CMD plugin v3.2.0 by urShadow has been loaded
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: pawnraknet.so
      [15:50:17] [Pawn.RakNet] plugin v1.6.0 loading...
      [15:50:17] [Pawn.RakNet] 
          | Pawn.RakNet 1.6.0 | 2016 - 2023
          |--------------------------------
          | Author and maintainer: katursis

          | Compiled: Feb 12 2023 at 19:35:06
          |--------------------------------------------------------------
          | Repository: https://github.com/katursis/Pawn.RakNet
          |--------------------------------------------------------------
          | Wiki: https://github.com/katursis/Pawn.RakNet/wiki
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: sscanf.so
      [15:50:17] 
      [15:50:17]  ===============================
      [15:50:17]       sscanf plugin loaded.     
      [15:50:17]          Version:  2.8.3        
      [15:50:17]   (c) 2018 Alex "Y_Less" Cole  
      [15:50:17]  ===============================
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: streamer.so
      [15:50:17] 
      *** Streamer Plugin v2.9.6 by Incognito loaded ***
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: mysql_static.so
      [15:50:17]  >> plugin.mysql: R39-6 successfully loaded.
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: TOTP.so
      [15:50:17] TOTP plugin v1.0.1 by Games loaded.
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: profiler.so
      [15:50:17]   Profiler plugin 2.15.1
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: timerfix.so
      [15:50:17]   >> TimerFix v1.5 successfully loaded.
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: UTuning.so
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: housecar.so
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: TOTP.so
      [15:50:17] TOTP plugin v1.0.1 by Games loaded.
      [15:50:17]   Loaded.
      [15:50:17]  Loading plugin: FCNPC.so
      [15:50:17] 
      [15:50:17] -------------------------------------------------
      [15:50:17]      FCNPC - Fully Controllable NPC v2.0.11
      [15:50:17]             GNU/Linux SA-MP 0.3.7 R2
      [15:50:17]            Aug 23 2024 at 16:35:48
      [15:50:17] 
      [15:50:17]   Author:       OrMisicL (2013 - 2015)
      [15:50:17]   Continued by: ziggi    (2016 - present)
      [15:50:17] 
      [15:50:17]   See full credits in the README.md file
      [15:50:17] -------------------------------------------------
      [15:50:17] 
      [15:50:17] Loading...
      [15:50:17] 
      [15:50:17] -------------------------------------------------
      [15:50:17]    ColAndreasv1.4.0
      [15:50:17] 
      [15:50:17]    Created By:
      [15:50:17]      [uL]Chris42O
      [15:50:17]      [uL]Slice
      [15:50:17]      [uL]Pottus
      [15:50:17] -------------------------------------------------
      [15:50:17] 
      [15:50:17] Loading...
      [15:50:17] ColAndreas v1.4.0 Loaded.
      [15:50:17]   Loaded.
      [15:50:17]  Loaded 13 plugins.
      [15:50:17] 
      [15:50:17] Filterscripts
      [15:50:17] ---------------
      [15:50:17]   Loading filterscript 'voice.amx'...
      [15:50:18] No collision data found.
      [15:50:18] 
      --------------------------------------
      [15:50:18]    VOICE COPY RADMIR BY Маттео dev.    
      [15:50:18] --------------------------------------
      [15:50:18]   Loaded 1 filterscripts.
      [15:50:20] ------------------------------------------
      [15:50:20]                  MELONITY AC                 
      [15:50:20] ------------------------------------------
      [15:50:20] weburl = "www.sa-mp.com"  (string)
      [15:50:20] [Vehicle]: Все транспортные средства созданы
      [15:50:20] [TP]: Все входы/выходы созданы
      [15:50:20] [ATM]: Все банкоматы созданы
      [15:50:20] Подключение к базе данных не удалось [Неизвестная ошибка. Код ошибки: -1]
      [15:50:20] -----------------------------------------
      [15:50:20]                                          
      [15:50:20]        CanVas Dev
      [15:50:20]                                          
      [15:50:20] -----------------------------------------
      [15:50:20] Number of vehicle models: 38
      [16:00:35] [connection] 93.159.241.195:1523 requests connection cookie.
      [16:00:36] [connection] incoming connection: 93.159.241.195:1523 id: 0
      [16:00:36] [join] Whoole_Daadadw has joined the server (0:93.159.241.195)
      [16:00:36] [part] Whoole_Daadadw has left the server (0:2)