DropAllWeapon

Тема в разделе "Общего назначения", создана пользователем Dr_Killjoy, 5 май 2012.

  1. Dr_Killjoy

    Dr_Killjoy Заблокированные

    DropAllWeapon


    Представляю вашему вниманию мутатор, который решает проблему, которая давно мучила меня, и думаю, далеко не меня одного. Этот мутатор позволяет избавиться от пропадания оружия после смерти - при включенном мутаторе, из умерших игроков выпадает не только оружие, которое у него в руках, но и весь остальной выкидываемый инвентарь.

    Автор: Dr. Killjoy (Steklo)

    Код для загрузки мутатора в .bat-файле или MutLoader:
    Код:
    DropAllWeapMut.DropAllWeapMut
    Распаковать архив в папку с игрой.

    Ссылка

    Исходник:

    Код:
    class DropAllWeapMut extends Mutator;
    function PostBeginPlay()
    {
    local GameRules G;
    Super.PostBeginPlay();
    
      G = spawn(class'DropAllWeaponRules');
      if ( Level.Game.GameRulesModifiers == None )
       Level.Game.GameRulesModifiers = G;
      else
       Level.Game.GameRulesModifiers.AddGameRules(G);
    
    }
    defaultproperties
    {
         GroupName="KF-GameRules"
         FriendlyName="Drop All Weapon"
         Description="When player dies, all his inventory is dropped on the floor."
    }
    
    Код:
    class DropAllWeaponRules extends GameRules;
    function bool PreventDeath(Pawn Killed, Controller Killer, class<DamageType> damageType, vector HitLocation)
    {
    local PlayerController PC;
    local Inventory I;
    local int c;
    
    if ( (NextGameRules != None) && NextGameRules.PreventDeath(Killed,Killer, damageType,HitLocation) )
      return true;
    
    PC = PlayerController(Killed.Controller);
    
    if( PC != none )
    {
      c = 0;
      while( KFHumanPawn(Killed).CurrentWeight > 1.0 && ++c<21 )
      for ( I = Killed.Inventory; I != none; I = I.Inventory )
      {
       if ( KFWeapon(I) != none && !KFWeapon(I).bKFNeverThrow )
       {
        I.Velocity = Killed.Velocity;
        I.DropFrom(Killed.Location + VRand() * 10);
       }
      }
    }
    return false;
    }
    defaultproperties
    {
    }
    

    Распространение по другим сайтам только с разрешения автора.

    Upd. Версия от Flame
     
    Последнее редактирование модератором: 6 авг 2019
    Denkul999, KLEYDOX, sonik82 и 20 другим нравится это.
  2. kok-s

    kok-s Консильери

    Если будет много оружеек валяться - то это дополнительная нагрузка на серв (если конечно на серве больше 6 человек например 20).

    За работу +
     
  3. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Обычно игроки или поднимают своё оружие, или продают. Слишком много навряд-ли будет валяться.
     
    UnDerWorlD нравится это.
  4. LLIePLLIeHb

    LLIePLLIeHb Guest

    Полезная штука, совмещу ее пожалуй с запретом на подбор оружия и на сервер . :thumbsup:
     
  5. HappyRodger

    HappyRodger Консильери

    как сказал Shiogorat "ВОТ ОН МУТ МОЕЙ МЕЧТЫ!!11"
     
  6. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Сам давно мечтал. А додумался как сделать, только вчера)
     
    UnDerWorlD нравится это.
  7. Фрэгл

    Фрэгл Administrator

    Dr_Killjoy,мут надо было назвать-МАРАДЕР. :biggrin:
    Но,вещь безусловно полезная.

    P.S.Бредовая мысль:возможно ли сделать так(например прописыванием команды в консоле),чтобы выпадало все оружие у конкретно указанного игрока(индитификатор можно брать из меню киквойта например).
     
  8. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Я подумаю над этим. Попробую сделать чтобы по нику админы могли дропать всё оружие.
     
    UnDerWorlD нравится это.
  9. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    Ну а что, иначе куда девались стволы из рюкзака ? :smile:
    А тут будет - вот оно всё, что тащил.
    Насчёт перегруза сервера - смотря сколько игроков и сколько они тащат. Иногда запасы делаются такие, что намного больше, чем выпадет из игроков.

    А гранаты и ножи тоже выпадают ?

    Мысль совсем не бредовая.
    На зомби-моде при помощи аналогичных функций наказывал вредителей, разрушающих баррикады и т.д. - оставлял без оружия [​IMG]. В КФ, думаю, это будет ещё эффективнее. Особенно в связке с FFPenalty.
    Да и компенсация пострадавшему.
     
  10. Папка01

    Папка01 ۞ Всевидящее око форума ۞

    Да, если ножи, шприцы и Сварка не падает - мут действительно может оказаться полезен.
    Хотя сколько же всего вытряхнется из наших Хай-левелов? (Банхамер, Мк23, М79, М32, РПГ7 :teehee: )
    Кстати, а как обстоит дело с минами например? Они ведь не могут выпасть.
     
  11. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Гранаты и ножи не выпадают. Если хотите, могу сделать ещё фичу, чтобы все гранаты, которые были с игроком, падали на землю и взрывались (опционально).

    Мины относятся к невыпадаемому инвертарю. Они как и сварка, хилка, пист, нож, гранаты, - не будут дропаться.

    Посмотрел как всё реализовано в админ+, можно разве что сделать расширение админ плюс, или аналог админ плюс, только с одной командой. Но я ещё посмотрю, возможно есть какойто другой способ сделать эту команду рабочей, без модификации админки.
     
  12. Фрэгл

    Фрэгл Administrator

    Аналог админплюса был бы кстати,так как нет возможности поставить сам админплюс на сервер.
    Если не будет найден другой вариант конечно.
     
  13. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    Не-не-не, спасибо, обойдёмся.

    А то, что сварка, хилка, или нож после смерти выпадают - это другой вид "дропа" ?
    (И ещё где-то было обсуждение пожелания мута для выброса ножа и базовой беретты. Было давно. Дальше пожелания не ушли ?)

    Можно ли сделать ограничения :
    - по времени лежания ствола ?
    - по количеству выпавших/лежащих стволов (одного вида) * ?
    - по количеству выпавших с одного игрока * ?

    * при превышении лимита пропадает брошенное раньше всех
     
  14. offutt

    offutt Капо

    Человек сделал мутатор, выложил его, казалось бы.. бери да пользуйся...
    А что в ответ? Доделай это, а мне хочется что бы было так...
    Скажите спасибо за то, что есть и поставьте плюсиков.
     
  15. shiogorat

    shiogorat Son of Titan

    Ммммммм,я уверен что они благодарны.Ну и они-же не требуют,а предлагают.
     
  16. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Немного другой. Принцип тот же, но только мины не выпадают даже если в руках.
     
  17. Винни

    Винни Мододел

  18. 3xzet

    3xzet Мододел "Ы"

  19. Morkleb

    Morkleb Соучастник

    Хорошая штука. С переизбытком оружия на карте можно легко справиться путем урезания стартового капитала игрока. Так придется собирать то что потерял раньше =)
     
  20. Flame

    Flame -Заслуженый кодер форума-

    ну можно, например, так :)

    Функция для выбрасывания оружия у заданного игрока
    Код:
    function RemoveItemFromInv(Pawn P, string Item)
    {
    	local class<Weapon> WeaponClass;
    	local Inventory inv;
    
    	WeaponClass = class<Weapon>(DynamicLoadObject(Item, class'Class'));
    
    	inv=P.FindInventoryType(WeaponClass);
    	if( inv == None )
    		return;
    	inv.DropFrom(P.Location + VRand() * 160); //тут только надо настроить коэфф. насколько далеко выкидывать )
    }
    Ну и собственно фунция выбрасывающее оружие у игрока по локальному ID (кратные 2 числа, можно их поглядеть по Kick меню, например)
    Код:
    exec function DropWeapon(string item, string target)
    {
    	local Controller C;
    	local Pawn P;
    	if (target == "all") 
    	{
    		for( C = Level.ControllerList; C != None; C = C.nextController ) 
    		{
    			if( C.IsA('PlayerController'))
    			{
    				RemoveItemFromInv(C.Pawn,item);
    				C.Pawn.PlayTeleportEffect(true, true);
    			}
    		}
    		return;
    	} 
    	else if (target == "")
    	{
    		P = verifyTarget(target);
    		RemoveItemFromInv(P,item);
    		P.PlayTeleportEffect(true, true);
    		return;
    	} 
    	else 
    	{
    		for( C = Level.ControllerList; C != None; C = C.nextController ) 
    		{
    			if( C.IsA('PlayerController') && string(C.PlayerReplicationInfo.PlayerID)~=target)
    			{
    				RemoveItemFromInv(C.Pawn,item);
    				C.Pawn.PlayTeleportEffect(true, true);
    			}
    		}
    		return;
    	}
    }
    
    например, DropWeapon KFMod.CrossBow 2
    игрок с id равным 2 выкинет арбалет на землю
    ну и если надо всё оружие выкидывать, то добавить цикл по всему оружию и для каждого оружия вызвать RemoveItemFromInv или DropWeapon
    это уж как удобнее
    ну и запихнуть эти функции в админ+, например

    если же надо не выкинуть, а просто удалить, то можно так это сделать
    P.DeleteInventory(inv), где P эт экземпляр Pawn'а
     
    xorex, Dave_Scream, Dr_Killjoy и 3 другим нравится это.