Избитая тема... Проблема со спавном.
Суть проблемы в том, что после первой смерти игрока кидает на class selection, хотя SetSpawnInfo вызывается при каждой смерти (в OnPlayerDeath). Выбор класса не предусмотрен игровым режимом (RolePlay). Сделал костыль, который спаунит игрока (SpawnPlayer), если его кинуло на выбор класса. Но тогда на месте предыдущей смерти появляются бутылка или сигарета (как в багнутом спауне). Как сделать, чтобы игрока не кидало на выбор класса? Или хотя бы чтоб не было всяких баганых бутылок или сигарет... На популярных RP-серверах ведь это как-то исправлено. Ни разу еще не видел там, чтоб сервер заставлял игрока выбрать класс, либо появление бутылок или сигарет от данного бага... Может у кого-то есть решение данной проблемы? |
Настолько избитая, что http://forum.sa-mp.com/showpost.php?...1&postcount=33
AddPlayerClass в коде используется? |
public OnPlayerRequestClass(playerid, classid)
{
new
Float:x,
Float:y,
Float:z;
GetPlayerPos(playerid, x, y, z);
RemoveBuildingForPlayer(playerid, 1484, x, y, z, 10.0);
RemoveBuildingForPlayer(playerid, 1485, x, y, z, 10.0);
RemoveBuildingForPlayer(playerid, 1486, x, y, z, 10.0);
return 1;
}
Настолько избитая, что http://forum.sa-mp.com/showpost.php?...1&postcount=33
AddPlayerClass в коде используется? |
Его решение не исправляет проблему. Это должно помочь:
PHP Code:
|
Интересно, может Kalcor продает крупным проектам секретную супер-функцию, которая отключает class selection |
на самп-рп и арп class selection не отключен, при логине/регистрации эти стрелочки есть
|
Однако после первой смерти и даже после F4 там спаунит нормально, нет никаких бутылок, стрелок и спауна на Grove Street.
|
Однако после первой смерти и даже после F4 там спаунит нормально, нет никаких бутылок, стрелок и спауна на Grove Street.
|
Returning 0 in this callback will prevent the player from spawning. The player can be forced to spawn when SpawnPlayer is used, however the player will re-enter class selection the next time they die. |
S4D, AddPlayerClass используется в OnGameModeInit.
ZiGGi, что ж, спасибо, предметы теперь исчезают, даже удалось увидеть дымок от только что удаленной сигареты... Но можно ли как-то "отключить" class selection, чтобы игрока не кидало на него вообще? Опять же, есть игровые режимы, на которых отсутствует выбор класса и игрока после смерти туда не кидает... Интересно, может Kalcor продает крупным проектам секретную супер-функцию, которая отключает class selection |
#include <a_samp>
static
bool:gIsPlayerAuthorized[MAX_PLAYERS char];
main()
{
}
public OnPlayerRequestSpawn(playerid)
{
if (IsPlayerAuthorized(playerid)) {
return 1;
}
return 0;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true) == 0) {
SetPlayerHealth(playerid, 0.0);
return 1;
}
if (strcmp("/login", cmdtext, true) == 0) {
SetPlayerAuthorizedStatus(playerid, false);
TogglePlayerSpectating(playerid, 0);
return 1;
}
if (strcmp("/spawn", cmdtext, true) == 0) {
SpawnPlayer(playerid);
return 1;
}
return 0;
}
public OnPlayerRequestClass(playerid, classid)
{
new
Float:x,
Float:y,
Float:z;
GetPlayerPos(playerid, x, y, z);
RemoveBuildingForPlayer(playerid, 1484, x, y, z, 10.0);
RemoveBuildingForPlayer(playerid, 1485, x, y, z, 10.0);
RemoveBuildingForPlayer(playerid, 1486, x, y, z, 10.0);
SetSpawnInfo(playerid, 0, 124, 2499.8, -2129.6001, 23.5, 92.0, 10, 1, 38, 999999, 34, 999999);
if (IsPlayerAuthorized(playerid)) {
SpawnPlayer(playerid);
} else {
TogglePlayerSpectating(playerid, 1);
SetTimerEx("SetClassCameraPos", 200, 0, "i", playerid);
}
return 1;
}
forward SetClassCameraPos(playerid);
public SetClassCameraPos(playerid)
{
SetPlayerCameraPos(playerid, 1879.984252, -2908.610107, 1.996365);
SetPlayerCameraLookAt(playerid, 1879.666870, -2913.487304, 0.941269);
}
stock IsPlayerAuthorized(playerid)
{
return _:gIsPlayerAuthorized{playerid};
}
stock SetPlayerAuthorizedStatus(playerid, bool:status)
{
gIsPlayerAuthorized{playerid} = status;
}
stock IsPlayerAuthorized(playerid)
{
return _:gIsPlayerAuthorized{playerid};
}
PHP Code:
Получается функцию не надо объвлять как bool, сразу напечатал перед переменной _: и ф-ия понимает, что должна вернуть, так ведь? Ты вообще используешь такой вариант?) |
Особенность движка игры либо клиента, но точно не сервера. В 2010, на моем сервере вызывался рестартом через gmx. После смерти, те игроки которые присутствовали в момент рестарта, первый раз умирали таким образом. Точно не помню. Может путаю что то. Примерно было так.
|
Да понятно что не сервера. Просто может есть костыль какой то для исправления этого бага? Я пытался повторно убить игрока но он не умирает. Ставил 0 хп и меньше нуля, никаких изменений.
|
Не делать рестарты через gmx или кикать всех игроков перед рестартом, для перезахода на сервер. Не заморачивался этим вопросом, всегда перезагружал сервер через панель.
|
#define sample(%0) printf(" ... ... " #%0 " ... ...")
Hook:sample_OnGameModeInit() { sample("blablabla"); }
#include <a_samp> #include <a_mysql> #include <easyDialog> #include <Vectoral> #include <zcmd> #include <sscanf2> #include <YSI\y_hooks> #include <YSI\y_timers> #include <YSI\y_xml>
Вы бы код выложили, и с sample, и с кейсами.
В первом подозреваю переполнение стека. |
А почему бы до case не создать string с максимальным размером из всех, а в опциях использовать format(string, нужный_размер, ...) ? Да и вообще можно sizeof, ведь переменная всё равно максимальная создастся.
|