Paranoiiik
хачю клиентмод
- Сообщения
- 2,047
- Реакции
- 1,490
Здравствуйте.
shavit-hud запускается и без ошибок работает, а speclist - нет.
Игра - CS:S v34. Версии SM, установленные на серверах, и компиляторов для тестирования использовались 1.6.3, 1.9 и 1.10 в разных комбинациях.
Я понимаю, что в 34-й, вроде как, нету поддержки "KeyHintText", НО shavit-hud ведь как-то работает, хотя наблюдателей показывает по левой стороне, а не по правой, как это делает speclist.
+ на одном из серверов в CS:S v34 я видел, как shavit-hud показывает наблюдателей по правой стороне.
Знакомый программист пишет, что код, по сути, один и тот же, за исключением, как я понял, синтаксиса.
Какая-то лютая мистика.
Сам я не программист, д и ничего толком не понимаю. Вопрос в том, что это за мистика, и как заставить работать. Что редактировать, - мне плевать: хоть из shavit-hud вырезать лишнее и сделать из него самостоятельный плагин, хоть speclist "привести в порядок".
Я бы заказал, может, показ наблюдателей через HUD, но в 34-й (ClientMod поддерживает) с ним у меня будет обидное ограничение по количеству символов.
C-подобный:
void UpdateKeyHint(int client)
{
if((gI_Cycle % 10) == 0 && ((gI_HUDSettings[client] & HUD_SYNC) > 0 || (gI_HUDSettings[client] & HUD_TIMELEFT) > 0))
{
char sMessage[256];
int iTimeLeft = -1;
if((gI_HUDSettings[client] & HUD_TIMELEFT) > 0 && GetMapTimeLeft(iTimeLeft) && iTimeLeft > 0)
{
FormatEx(sMessage, 256, (iTimeLeft > 60)? "%T: %d minutes":"%T: <1 minute", "HudTimeLeft", client, (iTimeLeft / 60), "HudTimeLeft", client);
}
int target = GetHUDTarget(client);
if(IsValidClient(target) && (target == client || (gI_HUDSettings[client] & HUD_OBSERVE) > 0))
{
int style = Shavit_GetBhopStyle(target);
if((gI_HUDSettings[client] & HUD_SYNC) > 0 && Shavit_GetTimerStatus(target) == Timer_Running && gA_StyleSettings[style].bSync && !IsFakeClient(target) && (!gB_Zones || !Shavit_InsideZone(target, Zone_Start, -1)))
{
Format(sMessage, 256, "%s%s%T: %.01f", sMessage, (strlen(sMessage) > 0)? "\n\n":"", "HudSync", client, Shavit_GetSync(target));
if(!gA_StyleSettings[style].bAutobhop)
{
Format(sMessage, 256, "%s\n%T: %.1f", sMessage, "HudPerfs", client, Shavit_GetPerfectJumps(target));
}
}
if((gI_HUDSettings[client] & HUD_SPECTATORS) > 0)
{
int[] iSpectatorClients = new int[MaxClients];
int iSpectators = 0;
bool bIsAdmin = CheckCommandAccess(client, "admin_speclisthide", ADMFLAG_KICK);
for(int i = 1; i <= MaxClients; i++)
{
if(i == client || !IsValidClient(i) || IsFakeClient(i) || !IsClientObserver(i) || GetClientTeam(i) < 1 || GetHUDTarget(i) != target)
{
continue;
}
if((gCV_SpectatorList.IntValue == 1 && !bIsAdmin && CheckCommandAccess(i, "admin_speclisthide", ADMFLAG_KICK)) ||
(gCV_SpectatorList.IntValue == 2 && !CanUserTarget(client, i)))
{
continue;
}
iSpectatorClients[iSpectators++] = i;
}
if(iSpectators > 0)
{
Format(sMessage, 256, "%s%s%spectators (%d):", sMessage, (strlen(sMessage) > 0)? "\n\n":"", (client == target)? "S":"Other S", iSpectators);
for(int i = 0; i < iSpectators; i++)
{
if(i == 7)
{
Format(sMessage, 256, "%s\n...", sMessage);
break;
}
char[] sName = new char[gI_NameLength];
GetClientName(iSpectatorClients[i], sName, gI_NameLength);
ReplaceString(sName, gI_NameLength, "#", "?");
Format(sMessage, 256, "%s\n%s", sMessage, sName);
}
}
}
}
if(strlen(sMessage) > 0)
{
Handle hKeyHintText = StartMessageOne("KeyHintText", client);
BfWriteByte(hKeyHintText, 1);
BfWriteString(hKeyHintText, sMessage);
EndMessage();
}
}
}
C-подобный:
public Action:Timer_UpdateHudHint(Handle:timer, any:client)
{
new iSpecModeUser = GetEntProp(client, Prop_Send, "m_iObserverMode");
new iSpecMode, iTarget, iTargetUser;
new bool:bDisplayHint = false;
decl String:szText[254];
szText[0] = '\0';
// Dealing with a client who is in the game and playing.
if (IsPlayerAlive(client))
{
for(new i = 1; i <= MaxClients; i++)
{
if (!IsClientInGame(i) || !IsClientObserver(i))
continue;
iSpecMode = GetEntProp(i, Prop_Send, "m_iObserverMode");
// The client isn't spectating any one person, so ignore them.
if (iSpecMode != SPECMODE_FIRSTPERSON && iSpecMode != SPECMODE_3RDPERSON)
continue;
// Find out who the client is spectating.
iTarget = GetEntPropEnt(i, Prop_Send, "m_hObserverTarget");
// Are they spectating our player?
if (iTarget == client)
{
Format(szText, sizeof(szText), "%s%N\n", szText, i);
bDisplayHint = true;
}
}
}
else if (iSpecModeUser == SPECMODE_FIRSTPERSON || iSpecModeUser == SPECMODE_3RDPERSON)
{
// Find out who the User is spectating.
iTargetUser = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
if (iTargetUser > 0)
Format(szText, sizeof(szText), "Spectating %N:\n", iTargetUser);
for(new i = 1; i <= MaxClients; i++)
{
if (!IsClientInGame(i) || !IsClientObserver(i))
continue;
iSpecMode = GetEntProp(i, Prop_Send, "m_iObserverMode");
// The client isn't spectating any one person, so ignore them.
if (iSpecMode != SPECMODE_FIRSTPERSON && iSpecMode != SPECMODE_3RDPERSON)
continue;
// Find out who the client is spectating.
iTarget = GetEntPropEnt(i, Prop_Send, "m_hObserverTarget");
// Are they spectating the same player as User?
if (iTarget == iTargetUser)
Format(szText, sizeof(szText), "%s%N\n", szText, i);
}
}
/* We do this to prevent displaying a message
to a player if no one is spectating them anyway. */
if (bDisplayHint)
{
Format(szText, sizeof(szText), "Spectating %N:\n%s", client, szText);
bDisplayHint = false;
}
// Send our message
new Handle:hBuffer = StartMessageOne("KeyHintText", client);
BfWriteByte(hBuffer, 1);
BfWriteString(hBuffer, szText);
EndMessage();
return Plugin_Continue;
}
shavit-hud запускается и без ошибок работает, а speclist - нет.
C-подобный:
[SM] Exception reported: Invalid message name: "KeyHintText"
[SM] Blaming: cspeclist.smx
[SM] Call stack trace:
[SM] [0] StartMessage
[SM] [1] Line 256, C:\Paranoiiik\Hi)\Server\SM\v34\1.9.0.6190\scripting\include\usermessages.inc::StartMessageOne
[SM] [2] Line 194, C:\Paranoiiik\Hi)\Server\SM\v34\1.9.0.6190\scripting\cspeclist.sp::Timer_UpdateHudHint
Игра - CS:S v34. Версии SM, установленные на серверах, и компиляторов для тестирования использовались 1.6.3, 1.9 и 1.10 в разных комбинациях.
Я понимаю, что в 34-й, вроде как, нету поддержки "KeyHintText", НО shavit-hud ведь как-то работает, хотя наблюдателей показывает по левой стороне, а не по правой, как это делает speclist.
+ на одном из серверов в CS:S v34 я видел, как shavit-hud показывает наблюдателей по правой стороне.
Знакомый программист пишет, что код, по сути, один и тот же, за исключением, как я понял, синтаксиса.
Какая-то лютая мистика.
Сам я не программист, д и ничего толком не понимаю. Вопрос в том, что это за мистика, и как заставить работать. Что редактировать, - мне плевать: хоть из shavit-hud вырезать лишнее и сделать из него самостоятельный плагин, хоть speclist "привести в порядок".
Я бы заказал, может, показ наблюдателей через HUD, но в 34-й (ClientMod поддерживает) с ним у меня будет обидное ограничение по количеству символов.
Вложения
Последнее редактирование: