PDA

Просмотр полной версии : [Вопрос] SpawnPlayer



Delgado
16.05.2014, 02:48
Всем привет. Пытаюсь сделать систему выбора места спавна.
Например, если игрок выбрал место №1, то


PlayerInfo[playerid][pPosX] = 843.8967;
PlayerInfo[playerid][pPosY] = -1855.1732;
PlayerInfo[playerid][pPosZ] = 8.4677;
Ну и разумеется
SetPlayerPos(playerid, PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
Почему-то игрок спавнится в деревне LS (нулевые координаты)
Заранее спасибо!

Just_Fenix
16.05.2014, 05:47
Покажите код, когда респавнится игрок по вашей системе.

wAx
16.05.2014, 06:11
Не включаешь ли-ты режим спектатора?

TogglePlayerSpectating(playerid, true)
Или что-то типо того...
Во всяком случае, попробуй добавить
TogglePlayerSpectating(playerid, false) перед SetPlayerPos (это если у тебя во время реги спавн выбирают).

Убедись в правильности объявления переменных
PlayerInfo[playerid][pPosX] = 843.8967;
PlayerInfo[playerid][pPosY] = -1855.1732;
PlayerInfo[playerid][pPosZ] = 8.4677;

Попытайся изменить свой код и заспавнить игрока напрямую через SetPlayerPos, сохраняя лишь пункт в диалоге который он выбрал.

DeimoS
16.05.2014, 10:26
OnPlayerSpawn покажите.

Delgado
16.05.2014, 13:04
Кстати, хп при спавне тоже 0, но при этом игрок не умирает. Просто моргают жизни.

public OnPlayerSpawn(playerid)
{
if ( GetPVarInt ( playerid, "Logged" ) == 0)return true;
SetPlayerPos(playerid, Float: pPosX,Float: pPosY,Float: pPosZ);
SetPlayerFacingAngle(playerid, 280);
SetPlayerHealth(playerid, PlayerInfo[playerid][pHp]);
SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]);
//======TextDraw
new string[128];
format(string, sizeof(string), "Development...");
sait[playerid] = TextDrawCreate(550.000000, 2.000000, string);
TextDrawFont(sait[playerid], 3);
TextDrawColor(sait[playerid],0x33AAFFFF);//öâåò òåêñòà
TextDrawLetterSize(sait[playerid], 0.3600, 1.400000);
TextDrawSetOutline(sait[playerid], 1);
TextDrawShowForPlayer(playerid, sait[playerid]);
//=====================
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun0], PlayerInfo[playerid][ammo0]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun1], PlayerInfo[playerid][ammo1]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun2], PlayerInfo[playerid][ammo2]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun3], PlayerInfo[playerid][ammo3]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun4], PlayerInfo[playerid][ammo4]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun5], PlayerInfo[playerid][ammo5]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun6], PlayerInfo[playerid][ammo6]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun7], PlayerInfo[playerid][ammo7]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun8], PlayerInfo[playerid][ammo8]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun9], PlayerInfo[playerid][ammo9]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun10], PlayerInfo[playerid][ammo10]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun11], PlayerInfo[playerid][ammo11]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun12], PlayerInfo[playerid][ammo12]);
return 1;
}

wAx
16.05.2014, 13:19
SetPlayerPos(playerid, Float: pPosX,Float: pPosY,Float: pPosZ);
замени на

SetPlayerPos(playerid, pPosX,pPosY, pPosZ);

И у меня еще такое предположение есть:


if ( GetPVarInt ( playerid, "Logged" ) == 0)return true;
PVar "Logged", не меняется на 1 при авторизации, проверь и это тоже

Delgado
16.05.2014, 13:39
Если заменить аргументы в SetPlayerPos, то вот, что получается:
warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch

wAx
16.05.2014, 13:45
Покажи enum где ты создаешь pPosX,pPosY, pPosZ

Delgado
16.05.2014, 13:52
Float: pPosX,
Float: pPosY,
Float: pPosZ,

DeimoS
16.05.2014, 14:22
1) Прочтите это (http://pro-pawn.ru/showthread.php?8668-%D0%9F%D1%80%D0%B8-%D0%BD%D0%B0%D0%B2%D0%B8%D0%B4%D0%B5%D0%BD%D0%B8%D0%B9-%D0%BD%D0%B0-TextDraw-%D0%BD%D0%B5-%D0%BF%D1%80%D0%BE%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%B8%D1%82-%D0%B2%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-%D1%86%D0%B2%D0%B5%D1%82%D0%B0&p=37625&viewfull=1#post37625) и посмотрите на ваш код
2) Зачем использовать format? Он там не требуется.
3) Эмм, вы собираетесь сохранять данные о позиции игрока в глобальную переменную... Если на сервер зайдёт несколько игроков, данные перепутаются. Вот, в общем

//Глобальные массивы
new Float: Pos_X_[MAX_PLAYERS],
Float: Pos_Y_[MAX_PLAYERS],
Float: Pos_Z_[MAX_PLAYERS];

//Колбэк
public OnPlayerSpawn(playerid)
{
if(!GetPVarInt(playerid, "Logged" ))return true;
SetPlayerPos(playerid, Pos_X_[playerid], Pos_Y_[playerid], Pos_Z_[playerid]);
SetPlayerFacingAngle(playerid, 280);
SetPlayerHealth(playerid, PlayerInfo[playerid][p/**/Hp]);
SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]);
//======TextDraw
sait[playerid] = TextDrawCreate(550.000000, 2.000000, "Development...");
TextDrawFont(sait[playerid], 3);
TextDrawColor(sait[playerid],0x33AAFFFF);
TextDrawLetterSize(sait[playerid], 0.3600, 1.400000);
TextDrawSetOutline(sait[playerid], 1);
TextDrawShowForPlayer(playerid, sait[playerid]);
//=====================
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun0], PlayerInfo[playerid][ammo0]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun1], PlayerInfo[playerid][ammo1]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun2], PlayerInfo[playerid][ammo2]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun3], PlayerInfo[playerid][ammo3]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun4], PlayerInfo[playerid][ammo4]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun5], PlayerInfo[playerid][ammo5]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun6], PlayerInfo[playerid][ammo6]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun7], PlayerInfo[playerid][ammo7]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun8], PlayerInfo[playerid][ammo8]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun9], PlayerInfo[playerid][ammo9]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun10], PlayerInfo[playerid][ammo10]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun11], PlayerInfo[playerid][ammo11]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun12], PlayerInfo[playerid][ammo12]);
return 1;
}
И переделайте весь код под новые переменные

Delgado
16.05.2014, 14:26
Все решилось вот этим:

SetPlayerPos(playerid, PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
У меня координаты игрока в enum со всеми данными аккаунта :)
По поводу format
Он используется в textdraw, там раньше был показатель, который менялся при определенных условиях.
Сейчас там просто надпись, не знаю, что будет потом.
Либо сделаю ссылку на сайт, либо что-нибудь под атмосферу. Еще не решил.
Спасибо за помощь!
Закрыто.