Посмотрел вчера. Сама идея очень понравилась. Действительно почти как в КС, не то что в скрипте UAS.
AVANGARD, несколько вопросов и предложений.
1)зачем в этом скрипте команды самоубийства, смены ника, спектатора, просмотра статистики - зачем загружать скрипт для смены мода ненужными функциями. Их и так навалом в других скриптах. Как их можно от туда "изъять"?
2)Команды вводятся без / - это очень неудобно так как набраные команды идут в общий чат и флудят. В связи с этим влпрос - можно ли переделать на команды через / ?
3)Это конечно на любителя, но настрйоки в скрипте делаются непосредственно в файле скрипта (такие как voteON=1 и AutoChangeMode=1, DMTime = 1800) после чего его надо скомпилировать - имхо не совсем удобно. Лучьше отдельным файлом votemap.cfg
3)По умолчанию скрипт расчитан на 12 модов - как правильно сделать меньше?
4)В скрипте хорошо реализован вывод русских букв, посредствой какой то кодировки или каких то символов (незнаю как точно выразится, вот на подобии ~w~CMEHA ‚E†MMOѓA HA ~r~%s) - где можно найти эти символы и их соответствие реальным буквам?Добавлено (19.12.2008, 08:13)
---------------------------------------------
Для "изъятия" ненужных команд достаточно ли будет вырезать вот эти строки?
//************************Переход в режим наблюдателя***********************//
if((strcmp("spect", tmp, true, strlen(tmp)) == 0))
{
if(IsPlayerAdmin(playerid) && PlayerSpectating[playerid] == 0)
{
PlayerSpectating[playerid]=1;
format(string, sizeof(string), "***Игрок %s перешёл в режим наблюдения",playername);
SendClientMessageToAll(COLOR_WHITE, string);
strins(playername,"[SPEC]",0);
SetPlayerName(playerid, playername);
return 0;
}
else
{
SendClientMessage(playerid,COLOR_RED, "SERVER: Вам не позволено использовать эту команду!");
return 0;
}
}
//*************************Выход из режима наблюдения****************************//
if((strcmp("spectoff", tmp, true, strlen(tmp)) == 0))
{
if(PlayerSpectating[playerid] == 1)
{
format(string, sizeof(string), "***Игрок %s вернулся в игру",playername);
SendClientMessageToAll(COLOR_WHITE, string);
PlayerSpectating[playerid] = 0;
TogglePlayerSpectating(playerid, 0);
SetCameraBehindPlayer(playerid);
strdel(playername, 0, 6);
SetPlayerName(playerid, playername);
OnPlayerSpawn(playerid);
return 0;
}
else
{
SendClientMessage(playerid, COLOR_RED, "SERVER: Вы не в режиме наблюдения!");
}
}
//**********************Самоубийство****************************//
if((strcmp("kill", tmp, true, strlen(tmp)) == 0))
{
SetPlayerHealth(playerid, 0);
return 0;
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256];
new cmd[256],idx;
cmd = strtok(cmdtext, idx);
new playername[256];
GetPlayerName(playerid,playername,sizeof(playername));
//*************************Смена ника в игре********************************
if (strcmp(cmd, "/name", true)==0)
{
new nicktmp[19];
format(nicktmp, sizeof(nicktmp), "%s", strtok(cmdtext, idx));
//new string2[256];
if(!strlen(nicktmp))
{
SendClientMessage(playerid, COLOR_RED, " ИСПОЛЬЗОВАНИЕ: /name [новый ник]");
return 1;
}
else
{
if(strlen(nicktmp) < 3)
{
SendClientMessage(playerid, COLOR_RED, "SERVER: Cлишком короткий ник!");
return 1;
}
else if(strlen(nicktmp) > 16)
{
SendClientMessage(playerid, COLOR_RED, "SERVER: Cлишком длиный ник!");
return 1;
}
else
{
format(string, sizeof(string), "%s сменил имя на %s", playername, nicktmp);
SendClientMessage(playerid,COLOR_WHITE, string);
//format(string2, sizeof(string2), "PlayersStat/%s.txt", nicktmp);
//fremove(string2);
SetPlayerName(playerid, nicktmp);
OnPlayerUpdate(playerid);
return 1;
}
}
}
return 0;
}
//**************************Чтение статистики игроков**************************//
public OnPlayerReadStat(playerid)
{
new string2[32];
new playername[256];
new valtmp[128];
GetPlayerName(playerid,playername,sizeof(playername));
format(string2, sizeof(string2), "PlayersStat/%s.txt", playername);
//new File: file = fopen(string2, io_read);
if(fexist(string2))
{
new File: file = fopen(string2, io_read);
fread(file, valtmp);GetVal(valtmp);PlayerInfo[playerid][pKills] = RetVal;
fread(file, valtmp);GetVal(valtmp);PlayerInfo[playerid][pDeaths] = RetVal;
fread(file, valtmp);GetVal(valtmp);PlayerInfo[playerid][pScore] = RetVal;
fread(file, valtmp);GetVal(valtmp);PlayerInfo[playerid][pRatio] = RetVal;
fclose(file);
SendClientMessage(playerid,COLOR_WHITE,"*Вашa статистика загружена!");
SendClientMessage(playerid,COLOR_WHITE,"******************************************************************");
SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
}
else
{
fcreate(string2);
SendClientMessage(playerid,COLOR_WHITE,"*Ваш аккаунт создан автоматически!");
SendClientMessage(playerid,COLOR_WHITE,"******************************************************************");
}
}
public GetVal(string[])
{
new tmp1[32];
new idx;
tmp1 = strtok(string, idx);
tmp1 = strtok(string, idx);
RetVal = strval(tmp1);
strmid(string, string, 0, strlen(string)-1, 255);
}
//**************************Обновление статистики игрока*****************************//
public OnPlayerUpdate(playerid)
{
new string3[32];
new playername[256];
new Float:ratio = floatdiv(PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths]);
GetPlayerName(playerid,playername,sizeof(playername));
PlayerInfo[playerid][pScore] = GetPlayerScore(playerid);
format(string3, sizeof(string3), "PlayersStat/%s.txt", playername);
new File: hFile = fopen(string3, io_write);
if(hFile)
{
new var[32];
format(var, 32, "Kills %d\r\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
format(var, 32, "Deaths %d\r\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
format(var, 32, "Score %d\r\n",PlayerInfo[playerid][pScore]);fwrite(hFile, var);
format(var, 32, "Ratio %.2f\r\n",ratio);fwrite(hFile, var);
fclose(hFile);
}
return 1;
}
//*************************Вывод статистики мгрока*****************************//
public ShowStats(playerid)
{
new string[64];
new playername[256];
new Float:ratio=floatdiv(PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths]);
GetPlayerName(playerid,playername,sizeof(playername));
format(string, sizeof(string)," Статистика: %s",playername);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
format(string, sizeof(string), " Убийств:[%d], Смертей:[%d], Очки:[%d], Коэффициент:[%.2f]",PlayerInfo[playerid][pKills],PlayerInfo[playerid][pDeaths],PlayerInfo[playerid][pScore],ratio);
SendClientMessage(playerid, COLOR_LIGHTBLUE,string);
}
public OnPlayerSpectat(playerid)
{
new string[256];
new pname[256];
for(new i = 0; i <= MAX_PLAYERS; i++)
{
if(PlayerSpectating[i] == 1)
{
if(IsPlayerConnected(pID))
{
GetPlayerName(pID,pname,sizeof(pname));
format(string,sizeof(string),"~n~~n~~n~~n~~n~~n~~n~~n~HAЂ‡”ѓEH…E: ~r~%s(ID:%d)",pname,pID);
GameTextForPlayer(i, string,2000,5);
TogglePlayerSpectating(i, 1);
PlayerSpectatePlayer(i, pID);
}
else
{
if(pID==MAX_PLAYERS)
{
pID=0;
}
else
{
pID++;
}
}
}
}
return 1;
}