Ребят, не подскажите какую нибудь проверку на состояние автомобиля (заведен ли двигатель или нет). p.s Буду "пихать" в OnPlayerKeyStateChange |
Возможно ли скриптово остановить поезд/трамвай? SetVehicleVelocity и замораживать игрока не тормозят.
|
Для чего нужна функция - SetTeamCount(кол-во команд)?
И работает ли / исправили SetPlayerTeam? Т.к. работала она нестабильно. |
Для установки количества команд на сервере.
Ни о каких проблемах с функцией SetPlayerTeam ни когда не наблюдал, какую нестабильность вы в ней увидели? |
Все просто, последний раз ее использовал на 0.3b или 0.3c (не помню), ставил в OnplayerSpawn (как указано в вики), но довольно часто срабатывала не правильно (можно было грохнуть игрока из своей команды). Спрашивал, вроде, здесь же (http://forum.sa-mp.com/showthread.ph...am#post1226606), ответили, что работа этой функции нестабильна.
Хотя, вроде, исправили, порылся в поиске, увидел следующее - "Fix for SetPlayerTeam() sometimes desyncing and allowing friendly fire." |
Разве это не очевидно:
pawn Код:
|
YCMD:test(playerid, params[], help)
{
new string[32], amount;
sscanf(params, "s[32]iuii", string, amount,giveplayerid,amount2,amount3);
if(!strcmp(string, "buy", true))
{
if (!amount3) return SendClientMessage(playerid, COLOR_GREY, "Use /test [text] [amount]!");
//Здесь параметр 'amount3' используется
}
else if(!strcmp(string, "buy2", true))
{
//Здесь параметр 'amount' не нужен
}
else return SendClientMessage(playerid, COLOR_GREY, "Use /test [text] [amount]!");
}
А если более сложная конструкция, на подобии:
Code:
YCMD:test(playerid, params[], help) { new string[32], amount; sscanf(params, "s[32]iuii", string, amount,giveplayerid,amount2,amount3); if(!strcmp(string, "buy", true)) { if (!amount3) return SendClientMessage(playerid, COLOR_GREY, "Use /test [text] [amount]!"); //Здесь параметр 'amount3' используется } else if(!strcmp(string, "buy2", true)) { //Здесь параметр 'amount' не нужен } else return SendClientMessage(playerid, COLOR_GREY, "Use /test [text] [amount]!"); } Как быть в данном случае? Как убрать необходимость ввода предыдущих параметров? |
Ещё элементарней: отказаться от столь сложной логики.
Смотри на функционал с точки зрения пользователя, а это по сути дети, им лень вводить по 3-4 параметра в консоль, да даже 2 это чаще всего много, дайте им графическое меню и селекторы. |
Графическое меню это понятно, но тут нужно вывод с помощью команды делать. А то, что перед параметром amount3, стоят ещё другие параметры никто не знает. Поэтому команду будет набрать невозможно. Если другого выхода нет, кроме как вывод информации через меню, то это печально...
|
strmid(PlayerInfo[playerid][pEmail], inputtext,0,strlen(inputtext), 255); |
PlayerInfo[playerid][pEmail][0] = EOS; strcat(PlayerInfo[playerid][pEmail], inputtext);
Печально то что вы вывод информации через меню считаете печальным.
Информация к размышлению: почему люди отказались от консольных приложений в пользу графического интерфейса?! |
А так:
Code:
PlayerInfo[playerid][pEmail][0] = EOS; strcat(PlayerInfo[playerid][pEmail], inputtext); |
stock SaveAccount1(playerid)
{ // Сохранение аккаунта.
if(PlayerInfo[playerid][pLogged] == true)
{ // Проверка, если аккаунт авторизован.
CheckMySQLConnection(); // Проверяем, подключена ли БД.
new query[800], sqlname[MAX_PLAYER_NAME], sqlpass[64], string[800];
new origin = PlayerInfo[playerid][pOrigin];
new house = PlayerInfo[playerid][pHouse];
new autos = PlayerInfo[playerid][pAuto];
new timer = PlayerInfo[playerid][pTime];
new exp = PlayerInfo[playerid][pExp];
new chas = PlayerInfo[playerid][pChas];
new bank = PlayerInfo[playerid][pBank];
new bizz = PlayerInfo[playerid][pBizz];
new sex = PlayerInfo[playerid][pSex];
new zvezdi = PlayerInfo[playerid][pZvezdi];
new timezv = PlayerInfo[playerid][pTimeZv];
new jailed = PlayerInfo[playerid][pJailed];
new jtime = PlayerInfo[playerid][pJailTime];
new pmail = PlayerInfo[playerid][pEmail];
mysql_real_escape_string(PlayerInfo[playerid][pName], sqlname);
mysql_real_escape_string(PlayerInfo[playerid][pPassword], sqlpass);
strcat(string,"UPDATE `Accounts` SET `Origin` = '%i', `House` = '%i', `Auto` = '%i', `Time` = '%i', `Exp` = '%i', `Chas` = '%i'",sizeof(string));
strcat(string,", `Bank` = '%i', `Bizz` = '%i', `Sex` = '%i', `Zvezdi` = '%i', `TimeZv` = '%i', `Jailed` = '%i', `JailTime` = '%i', `Mail` = '%s' WHERE `ID` = '%i'",sizeof(string));
format(query, sizeof(query),string,origin,house,autos,timer,exp,chas,bank,bizz,sex,zvezdi,timezv,jailed,jtime,pmail,PlayerInfo[playerid][pID]);
mysql_debug(1);
mysql_query(query); // Отправляем запрос
}
return 1;
}
У тебя pEmail не массив, а переменная, поэтому и будет хранить всего лишь один символ
|
stock SaveAccount1(playerid) { if(PlayerInfo[playerid][pLogged] == true) { CheckMySQLConnection(); new query[800], sqlname[MAX_PLAYER_NAME], sqlpass[64]; mysql_real_escape_string(PlayerInfo[playerid][pName], sqlname);//а эти нам сохранять не надо и без них хорошо mysql_real_escape_string(PlayerInfo[playerid][pPassword], sqlpass);//а эти нам сохранять не надо и без них хорошо format(query, sizeof(query),"UPDATE `Accounts` SET\ `Origin` = '%i', `House` = '%i', `Auto` = '%i', `Time` = '%i', `Exp` = '%i',\ `Chas` = '%i', `Bank` = '%i', `Bizz` = '%i', `Sex` = '%i', `Zvezdi` = '%i',\ `TimeZv` = '%i', `Jailed` = '%i', `JailTime` = '%i', `Mail` = '%s' WHERE `ID` = '%i'", PlayerInfo[playerid][pOrigin], PlayerInfo[playerid][pHouse], PlayerInfo[playerid][pAuto], PlayerInfo[playerid][pTime], PlayerInfo[playerid][pExp], PlayerInfo[playerid][pChas], PlayerInfo[playerid][pBank], PlayerInfo[playerid][pBizz], PlayerInfo[playerid][pSex], PlayerInfo[playerid][pZvezdi], PlayerInfo[playerid][pTimeZv], PlayerInfo[playerid][pJailed], PlayerInfo[playerid][pJailTime], PlayerInfo[playerid][pEmail], PlayerInfo[playerid][pID]); mysql_debug(1); mysql_query(query); } return 1; }