Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Телепорт и массив
Телепорт и массив
Naykon Дата: Пятница, 12.10.2012, 12:55:46 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Code
    if (IsClientInGame(i) && IsPlayerAlive(i) && StrEqual(text, "!zsave"))
     {
     GetClientAbsOrigin(Ztele[i], SG_Pos);
     PrintToChatAll("Оп");
     }
      
     if (IsClientInGame(i) && IsPlayerAlive(i) && StrEqual(text, "!ztele"))
     {
     TeleportEntity(i, SG_Pos, NULL_VECTOR, NULL_VECTOR);
     PrintToChatAll("Телепортирован");
     }


На что сообразительности хватило, а вообще не могу понять как сделать так чтоб телепортировало (!ztele) туда где игрок сохранился (!zsave) да так чтоб этой командой пользовались все. Т.е точки сохранения у всех разные...
 
_wS_ Дата: Пятница, 12.10.2012, 13:20:40 | Сообщение # 2
Thanks
Саму позицию нужно хранить в массиве.. И ты опять делаешь глупые повторные условия в if (

Code
new Float:g_Pos[MAXPLAYERS+1][3];

if (IsClientInGame(i) && IsPlayerAlive(i)) // IsClientInGame(i) вообще лишнее наверно
{
     if (strcmp(text, "!zsave") == 0)
     {
         GetClientAbsOrigin(i, g_Pos[i]);   
         PrintToChat(i, "Позиция сохранена");
     }
     else if (strcmp(text, "!ztele") == 0)
     {
         // перед тем как телепортировать, нужно убедиться, что игрок сохранил позицию..
         // т.е. после входа на сервер, например, делай g_Pos[i][0] = 0.0;
         if (g_Pos[i][0] == 0.0) PrintToChat(i, "Сначала сохрани позицию (!zsave)");
         else TeleportEntity(i, g_Pos[i], NULL_VECTOR, NULL_VECTOR);
     }
}
 
Naykon Дата: Суббота, 13.10.2012, 12:38:29 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
благодарю небольшой подвопрос по поводу удаления оружия у игрока и запрета на подбор оружия...
Я дам участки кода....
Code

     if (IsClientInGame(client))
     {
      for (new slot = 0; slot < 5; slot++)
      {
        decl index;
        if ((index = GetPlayerWeaponSlot(client, slot)) >= 0)
       {
        RemovePlayerItem(client, index);
       }
      }  
     }

OpenTimer != INVALID_HANDLE - заставляем игрока скинуть все оружие.
Code

public item_pickup(Handle:event, const String:name[], bool:dontBroadcast)
{
  new client = GetClientOfUserId(GetEventInt(event, "userid"));
  if (OpenTimer != INVALID_HANDLE)
  {
       SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
         }
}

Ловим момент касания к оружию: Если OpenTimer != INVALID_HANDLE то запускаем функцию запрета подбора....

Code
public Action:WeaponCanUse(client, weapon)
{
  if (OpenTimer != INVALID_HANDLE)
  {
   return Plugin_Handled; // запретить
  }
}

Игрока прошел мимо оружия...

Ошибки по факту:
1)Не всегда выкидывает гранаты почему-то...((
2)По непонятной причине игрок может подобрать оружие еще 1-2 раза ... потом только он начинает по нему ходить...((

Добавлено (12.10.2012, 14:08:38)
---------------------------------------------
+ гранаты дым и слеп не скидывает((

Добавлено (12.10.2012, 14:24:24)
---------------------------------------------

Code
public Action:ZombieTimerFunc(Handle:timer, any:x)
{
      ZombieTimerSec -= 1;
   if (ZombieTimerSec > 0)
   {
   return Plugin_Continue;
   }
   ZombieTimer = INVALID_HANDLE;
   zombie = 1;
    new client = GetRandomZombie();
    decl Handle:pr2;
   if ((pr2 = StartMessageAll("SayText2")) != INVALID_HANDLE)
   {
    BfWriteByte(pr2, Terrorist);
    BfWriteByte(pr2, true);
    decl String:xStR[150];
    Format(xStR, sizeof(xStR), "\x01???\x03[\x01SG\x04: \x03Зомби(v0.2)\x03] \x04Убегай! %N зомби!\x01???", client);
    BfWriteString(pr2, xStR);
    EndMessage();
   }
    for (new i = 1; i <= MaxClients; i++)
    {
     if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3)
     {  
      if (client > 0)
      {  
       CS_SwitchTeam(client, 2);
       SetEntProp(client, Prop_Data, "m_takedamage", 2);
       client = Zombies(client);
      }
      else  
      {
       SetEntProp(i, Prop_Data, "m_takedamage", 2);
      }
     }
     if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3)
     {  
      SetEntProp(i, Prop_Data, "m_takedamage", 2);
     }
    }
   ZombieEndTimerSec = 180; // время голосования в сек.
   ZombieEndTimer = CreateTimer(1.0, ZombieEndTimerFunc, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
  return Plugin_Stop;
}

GetRandomZombie()
{
  new indexes[MaxClients+1], players = 0;
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 3)
   {
    indexes[players++] = i;
   }
  }
  if (players > 0) return indexes[GetRandomInt(0, players-1)];
  return 0;
}


Подскажите пожалуйста почему у меня выбирает GetRandomZombie несколько игроков а не 1 ?

Добавлено (13.10.2012, 12:38:29)
---------------------------------------------
гляньте плиз((

 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Телепорт и массив
  • Страница 1 из 1
  • 1
Поиск: