- Регистрация
- 13 Янв 2012
- Сообщения
- 128
- Лучшие ответы
- 0
- Репутация
- 7
Всем привет.
В общем, проблема следующего характера. Есть таймер с текстом, который вылезает каждые 4 секунды. Вся эта "система" предназначена для имитации диалога игрока с актёрами, выдающими квесты.
Когда все выглядело примерно вот так, то работало без нареканий:
Однако когда у некоторых актёров стало больше "фраз" в case, то таймер начал бесоёбить -- 50/50 вероятность того, что при нахождении одного игрока на сервере всё сработает правильно, а как заходит ещё хотя бы 2-3 человека, то после фразы "Ого, ты так быстро!" (код будет ниже) игрока фризит и таймер не запускается. Бывали случаи, что при определённых обстоятельствах (невыясненных), спустя 4-6 минут таймер всё-таки запускался, а иногда мог также и зациклиться.
Я также в курсе насчёт того, что таймеры не переваривают тексты, но с этим ли сейчас проблема?
Короче говоря, в чём может быть проблема и как её решить/обойти?
В общем, проблема следующего характера. Есть таймер с текстом, который вылезает каждые 4 секунды. Вся эта "система" предназначена для имитации диалога игрока с актёрами, выдающими квесты.
Когда все выглядело примерно вот так, то работало без нареканий:
Код:
if(kv3ac[playerid] == 2)
{
SendClientMessage(playerid, -1, "{F9AE4E}Владислав: {FFFFFF}О-о-о, а вот и мой приятель-кладоискатель, хе-хе. Ну что, как там?");
TogglePlayerControllable(playerid, 0);
QuestDialogNumber[playerid] = 6;
questdialogtimer[playerid] = SetTimerEx("ActorQuestMessages", 4000, 1, "d", playerid);
}
Код:
switch(QuestDialogNumber[playerid])
{
case 6:
{
message_questid{playerid} ++;
switch(message_questid{playerid})
{
case 1: {
new string[128];
format(string, sizeof(string), "{FFFFFF}%s: Извини, но ничего ценного там не было. Видимо кто-то успел раньше меня.", player_info_pName[playerid]);
SendClientMessage(playerid, -1, string);
}
case 2: return SendClientMessage(playerid, -1, "{F9AE4E}Владислав: {FFFFFF}Мда уж... Ожидаемо, блин. Ну, ладно. У нас любой труд в почёте. Держи, заслужил!");
case 3: {
SendClientMessage(playerid, -1, "{F9AE4E}Владислав: {FFFFFF}И да, спасибо! Приходи чуть позже, может ещё дельце будет.");
SCM(playerid, 0x00FFA2FF, "Вы получили: {00FFD5}+ 10 ЕХР, + 20 копеек.");
GivePlayerMoney(playerid, 20);
player_info_pExp[playerid] +=10;
player_info_pMoney[playerid] +=20;
player_info_pCooldown[playerid] = 12;
kv3ac[playerid] = 0;
KillTimer(questdialogtimer[playerid]);
return 1;
}
default: return 1;
}
}
}
Код:
else if(player_info_pQuestInProcess[playerid] == 1 && player_info_pStep[playerid] == 0)
{
SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}Ого, как ты быстро. Неужели уже все?");
TogglePlayerControllable(playerid, 0);
QuestDialogNumber[playerid] = 11;
questdialogtimer[playerid] = SetTimerEx("ActorQuestMessages", 4000, 1, "d", playerid);
}
Код:
case 11:
{
message_questid{playerid} ++;
switch(message_questid{playerid})
{
case 1: return SendClientMessage(playerid, -1, "> {CCFF33}По интонации и выражению лица Лизы было довольно сложно определить: она шутит или же действительно такая наивная?");
case 2: {
new string[128];
format(string, sizeof(string), "{FFFFFF}%s: Я ищу кого-нибудь из кружка кибернетиков, кто смог бы подписать обходной лист, не знаешь, где они?", player_info_pName[playerid]);
SendClientMessage(playerid, -1, string);
}
case 3: return SendClientMessage(playerid, -1, "> {CCFF33}Лиза хитро сощурилась и заулыбалась. Что-то подсказывало, что добра ждать не стоит.");
case 4: return SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}Знаю, но тебе не скажу...");
case 5: return SendClientMessage(playerid, -1, "> {CCFF33}— девушка выдержала драматическую паузу и, нарочно переигрывая, будто играет роль на детском утреннике, продолжила, —");
case 6: return SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}...за просто так! А вот если бы я могла получить о тебя что-то взамен... ");
case 7: return SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}Знаю! Люблю сладкое, хочу сладкое! Принеси мне пару булочек из столовой, и тогда я тебе подскажу.");
case 8: return SendClientMessage(playerid, -1, "> {CCFF33}Пионерка широко заулыбалась и уставилась в кипу обходных листов, давая понять, что разговор закончен.");
case 9: {
SendClientMessage(playerid, -1, "> {CCFF33}~ Ладно, будем играть по их правилам. Надо найти столовую и забрать эти булочки. ~");
SetPVarInt(playerid, "bulkebi", 1);
KillTimer(questdialogtimer[playerid]);
TogglePlayerControllable(playerid, 1);
return 1;
}
default: return 1;
}
}
Короче говоря, в чём может быть проблема и как её решить/обойти?