Сборник полезных функций

K

Kruzya

Guest
[TF2] Смена модели игрока

C++:
stock void TF2_SetPlayerModel(int iClient, const char[] szModel) {
  if (!iClient || iClient < 1 || iClient > MaxClients || !IsClientInGame(iClient))
    return;

  SetVariantString(szModel);
  AcceptEntityInput(iClient, "SetCustomModel");

  SetEntProp(iClient, Prop_Send, "m_bUseClassAnimations", 1);
  SetEntProp(iClient, Prop_Send, "m_nBody", 0);
}
 
K

Kruzya

Guest
Передача прав на указатель
Обратите внимание: вызывать эту функцию должен первоначальный владелец указателя для корректной работоспособности.

C++:
stock void ChangeHandleOwner(Handle &hPointer, Handle hNewOwner = null) {
  Handle hDummy = CloneHandle(hPointer, hNewOwner);
  CloseHandle(hPointer);
  hPointer = hDummy;
}
 
K

Kruzya

Guest
Вызов определённого события с клоном указателя

C++:
stock void CallEventWithClonedHandle(const char[] szFunctionName, Handle hPointer) {
  Handle    hClone;
  Function  ptrFunc;
  Handle    hPlugin;
  Handle    hPlugIter = GetPluginIterator();
  Handle    hCoreHandle = GetMyHandle();

  while (MorePlugins(hPlugIter)) {
    hPlugin = ReadPlugin(hPlugIter);
    if (hPlugin == hCoreHandle || GetPluginStatus(hPlugin) != Plugin_Running)
      continue;

    ptrFunc = GetFunctionByName(hPlugin, szFunctionName);
    if (ptrFunc == INVALID_FUNCTION)
      continue;

    hClone = CloneHandle(hPointer, hPlugin);

    Call_StartFunction(hPlugin, ptrFunc);
    Call_PushCell(hClone);
    Call_Finish();
  }

  CloseHandle(hPlugIter);
}
 
K

Kruzya

Guest
[TF2] Получение индекса оружия по номеру энтити игрока и номеру слота
Обратите внимание: если оружия у игрока в этом слоте нет, вернёт -1.

C++:
stock int TF2_GetIndexOfWeaponSlot(int client, int slot)
{
  int weapon = GetPlayerWeaponSlot(client, slot);
  return (weapon > MaxClients && IsValidEntity(weapon) ? GetEntProp(weapon, Prop_Send, "m_iItemDefinitionIndex") : -1);
}
 
K

Kruzya

Guest
[TF2] Получение индекса оружия по номеру энтити оружия
Обратите внимание: если номер энтити некорректен или это не оружие, вернёт -1.

C++:
stock int TF2_GetWeaponIndex(int iWeapon)
{
  if (iWeapon <= MaxClients ||
      !IsValidEnt(iWeapon) ||
      !HasEntProp(iWeapon, Prop_Send, "m_iItemDefinitionIndex"))
    return -1;

  return GetEntProp(iWeapon, Prop_Send, "m_iItemDefinitionIndex");
}
 

Top