hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.16. 12:54



Jelenlévő felhasználók

Jelenleg 323 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 322 vendég

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot]az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [2 hozzászólás ] 
Szerző Üzenet
HozzászólásElküldve:2016.01.18. 19:55 
Offline
Jómunkásember

Csatlakozott:2014.10.30. 10:18
Hozzászólások:468
Megköszönt másnak: 235 alkalommal
Megköszönték neki: 34 alkalommal
Helló!

A gungame pluginba szeretném azt beletenni hogy a respawn protekt akkor is megszűnjön ha valaki elkezd lőni!!!

Akárhogy próbál a beleilleszteni vagy nincs védelem, vagy nem szűnik meg ha lő valaki! A plugin csak botokkal volt tesztelve :)

Ez itt az eredeti Gungame pluginből egy részlet! A Spawn Protect rész!

211. sor: set_task(time,"remove_spawn_protection",TASK_REMOVE_PROTECTION+id);
297. sor: public remove_spawn_protection(taskid)

  1. //**********************************************************************
  2. // RESPAWN FUNCTIONS
  3. //**********************************************************************
  4.  
  5. // get all of our spawns into their arrays
  6. init_spawns()
  7. {
  8.     // grab CSDM file
  9.     new mapName[32], csdmFile[64], lineData[64];
  10.     get_configsdir(cfgDir,31);
  11.     get_mapname(mapName,31);
  12.     formatex(csdmFile,63,"%s/csdm/%s.spawns.cfg",cfgDir,mapName);
  13.  
  14.     // collect CSDM spawns
  15.     if(file_exists(csdmFile))
  16.     {
  17.         new csdmData[10][6];
  18.  
  19.         new file = fopen(csdmFile,"rt");
  20.         while(file && !feof(file))
  21.         {
  22.             fgets(file,lineData,63);
  23.  
  24.             // invalid spawn
  25.             if(!lineData[0] || str_count(lineData,' ') < 2)
  26.                 continue;
  27.  
  28.             // BREAK IT UP!
  29.             parse(lineData,csdmData[0],5,csdmData[1],5,csdmData[2],5,csdmData[3],5,csdmData[4],5,csdmData[5],5,csdmData[6],5,csdmData[7],5,csdmData[8],5,csdmData[9],5);
  30.  
  31.             // origin
  32.             spawns[spawnCount][0] = floatstr(csdmData[0]);
  33.             spawns[spawnCount][1] = floatstr(csdmData[1]);
  34.             spawns[spawnCount][2] = floatstr(csdmData[2]);
  35.  
  36.             // angles
  37.             spawns[spawnCount][3] = floatstr(csdmData[3]);
  38.             spawns[spawnCount][4] = floatstr(csdmData[4]);
  39.             spawns[spawnCount][5] = floatstr(csdmData[5]);
  40.  
  41.             // team, csdmData[6], unused
  42.  
  43.             // vangles
  44.             spawns[spawnCount][6] = floatstr(csdmData[7]);
  45.             spawns[spawnCount][7] = floatstr(csdmData[8]);
  46.             spawns[spawnCount][8] = floatstr(csdmData[9]);
  47.  
  48.             spawnCount++;
  49.             csdmSpawnCount++;
  50.             if(spawnCount >= MAX_SPAWNS) break;
  51.         }
  52.         if(file) fclose(file);
  53.     }
  54.  
  55.     // collect regular, boring spawns
  56.     else
  57.     {
  58.         collect_spawns("info_player_deathmatch");
  59.         collect_spawns("info_player_start");
  60.     }
  61. }
  62.  
  63. // collect boring spawns into our spawn data
  64. collect_spawns(classname[])
  65. {
  66.     new ent = maxPlayers, Float:spawnData[3];
  67.     while((ent = fm_find_ent_by_class(ent,classname)))
  68.     {
  69.         // origin
  70.         pev(ent,pev_origin,spawnData);
  71.         spawns[spawnCount][0] = spawnData[0];
  72.         spawns[spawnCount][1] = spawnData[1];
  73.         spawns[spawnCount][2] = spawnData[2];
  74.  
  75.         // angles
  76.         pev(ent,pev_angles,spawnData);
  77.         spawns[spawnCount][3] = spawnData[0];
  78.         spawns[spawnCount][4] = spawnData[1];
  79.         spawns[spawnCount][5] = spawnData[2];
  80.  
  81.         // vangles
  82.         spawns[spawnCount][6] = spawnData[0];
  83.         spawns[spawnCount][7] = spawnData[1];
  84.         spawns[spawnCount][8] = spawnData[2];
  85.  
  86.         spawnCount++;
  87.         if(spawnCount >= MAX_SPAWNS) break;
  88.     }
  89. }
  90.  
  91. // bring someone back to life
  92. public begin_respawn(id)
  93. {
  94.     if(!ggActive || !get_pcvar_num(gg_dm) || !is_user_connected(id))
  95.         return;
  96.  
  97.     // now on spectator
  98.     if(!on_valid_team(id)) return;
  99.    
  100.     // alive, and not in the broken sort of way
  101.     if(is_user_alive(id) && !pev(id,pev_iuser1))
  102.         return;
  103.  
  104.     // round is over, or bomb is planted
  105.     if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant)))
  106.         return;
  107.  
  108.     new Float:delay = get_pcvar_float(gg_dm_spawn_delay);
  109.     if(delay < 0.1) delay = 0.1;
  110.  
  111.     new dm_countdown = get_pcvar_num(gg_dm_countdown);
  112.  
  113.     if((dm_countdown & 1) || (dm_countdown & 2))
  114.     {
  115.         respawn_timeleft[id] = floatround(delay);
  116.         respawn_countdown(id);
  117.     }
  118.  
  119.     remove_task(TASK_RESPAWN+id);
  120.     set_task(delay,"respawn",TASK_RESPAWN+id);
  121. }
  122.  
  123. // show the respawn countdown to a player
  124. public respawn_countdown(id)
  125. {
  126.     if(!is_user_connected(id) || is_user_alive(id))
  127.     {
  128.         respawn_timeleft[id] = 0;
  129.         return;
  130.     }
  131.  
  132.     new dm_countdown = get_pcvar_num(gg_dm_countdown);
  133.  
  134.     if(dm_countdown & 1)
  135.         client_print(id,print_center,"%L",id,"RESPAWN_COUNTDOWN",respawn_timeleft[id]);
  136.    
  137.     if(dm_countdown & 2)
  138.     {
  139.         set_hudmessage(255,255,255,-1.0,0.75,0,6.0,1.0,0.1,0.5);
  140.         ShowSyncHudMsg(id,hudSyncCountdown,"%L",id,"RESPAWN_COUNTDOWN",respawn_timeleft[id]);
  141.     }
  142.  
  143.     if(--respawn_timeleft[id] >= 1) set_task(1.0,"respawn_countdown",id);
  144. }
  145.  
  146. // REALLY bring someone back to life
  147. public respawn(taskid)
  148. {
  149.     new id = taskid-TASK_RESPAWN;
  150.     if(!is_user_connected(id) || !ggActive) return;
  151.  
  152.     // round is over, or bomb is planted
  153.     if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant)))
  154.         return;
  155.  
  156.     // now on spectator
  157.     if(!on_valid_team(id)) return;
  158.  
  159.     // clear countdown
  160.     new dm_countdown = get_pcvar_num(gg_dm_countdown);
  161.     if(dm_countdown & 1) client_print(id,print_center," ");
  162.     if(dm_countdown & 2) ClearSyncHud(id,hudSyncCountdown);
  163.  
  164.     // alive, and not in the broken sort of way
  165.     if(is_user_alive(id)) return;
  166.    
  167.     static model[22];
  168.  
  169.     // remove his dropped weapons from before
  170.     new ent = maxPlayers;
  171.     while((ent = fm_find_ent_by_class(ent,"weaponbox")))
  172.     {
  173.         pev(ent,pev_model,model,21);
  174.  
  175.         // don't remove the bomb!! (thanks ToT | V!PER)
  176.         if(equal(model,"models/w_c4.mdl",15) || equal(model,"models/w_backpack.mdl"))
  177.             continue;
  178.  
  179.         // this is mine
  180.         if(pev(ent,pev_owner) == id) dllfunc(DLLFunc_Think,ent);
  181.     }
  182.  
  183.     new spawn_random = get_pcvar_num(gg_dm_spawn_random);
  184.     if(spawn_random) spawnSounds[id] = 0;
  185.  
  186.     ExecuteHamB(Ham_CS_RoundRespawn,id); // note the B
  187.  
  188.     if(spawn_random)
  189.     {
  190.         do_random_spawn(id,spawn_random);
  191.         spawnSounds[id] = 1;
  192.  
  193.         // to be fair, play a spawn noise at new location
  194.         engfunc(EngFunc_EmitSound,id,CHAN_ITEM,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
  195.     }
  196.  
  197.     new Float:time = get_pcvar_float(gg_dm_sp_time);
  198.     new mode = get_pcvar_num(gg_dm_sp_mode);
  199.  
  200.     // spawn protection
  201.     if(time > 0.0 && mode)
  202.     {
  203.         spawnProtected[id] = 1;
  204.         if(mode == 2)
  205.         {
  206.             fm_set_user_godmode(id,1);
  207.             fm_set_rendering(id,kRenderFxGlowShell,200,200,100,kRenderNormal,8); // goldenish
  208.         }
  209.         else fm_set_rendering(id,kRenderFxGlowShell,100,100,100,kRenderNormal,8); // gray/white
  210.  
  211.         set_task(time,"remove_spawn_protection",TASK_REMOVE_PROTECTION+id);
  212.     }
  213. }
  214.  
  215. // place a user at a random spawn
  216. do_random_spawn(id,spawn_random)
  217. {
  218.     // not even alive, don't bother
  219.     if(!is_user_alive(id)) return;
  220.  
  221.     // no spawns???
  222.     if(spawnCount <= 0) return;
  223.  
  224.     // no CSDM spawns, mode 2
  225.     if(spawn_random == 2 && !csdmSpawnCount)
  226.         return;
  227.  
  228.     static Float:vecHolder[3];
  229.     new sp_index = random_num(0,spawnCount-1);
  230.  
  231.     // get origin for comparisons
  232.     vecHolder[0] = spawns[sp_index][0];
  233.     vecHolder[1] = spawns[sp_index][1];
  234.     vecHolder[2] = spawns[sp_index][2];
  235.  
  236.     // this one is taken
  237.     if(!is_hull_vacant(vecHolder,HULL_HUMAN) && spawnCount > 1)
  238.     {
  239.         // attempt to pick another random one up to three times
  240.         new i;
  241.         for(i=0;i<3;i++)
  242.         {
  243.             sp_index = random_num(0,spawnCount-1);
  244.  
  245.             vecHolder[0] = spawns[sp_index][0];
  246.             vecHolder[1] = spawns[sp_index][1];
  247.             vecHolder[2] = spawns[sp_index][2];
  248.            
  249.             if(is_hull_vacant(vecHolder,HULL_HUMAN)) break;
  250.         }
  251.  
  252.         // we made it through the entire loop, no free spaces
  253.         if(i == 3)
  254.         {
  255.             // just find the first available
  256.             for(i=sp_index+1;i!=sp_index;i++)
  257.             {
  258.                 // start over when we reach the end
  259.                 if(i >= spawnCount) i = 0;
  260.  
  261.                 vecHolder[0] = spawns[i][0];
  262.                 vecHolder[1] = spawns[i][1];
  263.                 vecHolder[2] = spawns[i][2];
  264.  
  265.                 // free space! office space!
  266.                 if(is_hull_vacant(vecHolder,HULL_HUMAN))
  267.                 {
  268.                     sp_index = i;
  269.                     break;
  270.                 }
  271.             }
  272.         }
  273.     }
  274.  
  275.     // origin
  276.     vecHolder[0] = spawns[sp_index][0];
  277.     vecHolder[1] = spawns[sp_index][1];
  278.     vecHolder[2] = spawns[sp_index][2];
  279.     engfunc(EngFunc_SetOrigin,id,vecHolder);
  280.  
  281.     // angles
  282.     vecHolder[0] = spawns[sp_index][3];
  283.     vecHolder[1] = spawns[sp_index][4];
  284.     vecHolder[2] = spawns[sp_index][5];
  285.     set_pev(id,pev_angles,vecHolder);
  286.  
  287.     // vangles
  288.     vecHolder[0] = spawns[sp_index][6];
  289.     vecHolder[1] = spawns[sp_index][7];
  290.     vecHolder[2] = spawns[sp_index][8];
  291.     set_pev(id,pev_v_angle,vecHolder);
  292.  
  293.     set_pev(id,pev_fixangle,1);
  294. }
  295.  
  296. // get rid of the spawn protection effects
  297. public remove_spawn_protection(taskid)
  298. {
  299.     new id = taskid-TASK_REMOVE_PROTECTION;
  300.     spawnProtected[id] = 0;
  301.  
  302.     if(!is_user_connected(id)) return;
  303.    
  304.     if(get_pcvar_num(gg_dm_sp_mode) == 2) fm_set_user_godmode(id,0);
  305.     fm_set_rendering(id); // reset back to normal
  306. }
  307.  
  308. // keep checking if a player needs to rejoin
  309. public check_deathmatch(taskid)
  310. {
  311.     new id = taskid-TASK_CHECK_DEATHMATCH;
  312.  
  313.     // left the game, or gungame is now disabled
  314.     if(!is_user_connected(id) || !ggActive) return;
  315.  
  316.     // now on spectator, or spawned already
  317.     if(!on_valid_team(id) || is_user_alive(id)) return;
  318.  
  319.     // DM still not enabled, keep waiting (or: we are still on choose-a-class screen)
  320.     if(!get_pcvar_num(gg_dm) || !pev(id,pev_iuser1))
  321.     {
  322.         set_task(10.0,"check_deathmatch",taskid);
  323.         return;
  324.     }
  325.  
  326.     // DM is enabled, respawn
  327.     respawn(TASK_RESPAWN+id);
  328. }
  329.  
  330. // what do you think??
  331. public randomly_place_everyone()
  332. {
  333.     // count number of legitimate players
  334.     new player, validNum;
  335.     for(player=1;player<=maxPlayers;player++)
  336.     {
  337.         if(is_user_connected(player) && on_valid_team(player))
  338.             validNum++;
  339.     }
  340.  
  341.     // not enough CSDM spawns for everyone
  342.     if(validNum > csdmSpawnCount)
  343.         return;
  344.  
  345.     // now randomly place them
  346.     for(player=1;player<=maxPlayers;player++)
  347.     {
  348.         // not spectator or unassigned
  349.         if(is_user_connected(player) && on_valid_team(player))
  350.             do_random_spawn(player,2);
  351.     }
  352. }


Ez meg lenne a csdm-ből a csdm_protection.sma (teljes)
Ugye ebben úgy van megoldva h lejön a védelem ha kattint valaki! Ez h lehet áttenni a másik pluginba?

132. sor: public On_ClientPreThink(id)

  1. /*
  2.  * csdm_protection.sma
  3.  * CSDM plugin that lets you have spawn protection
  4.  *
  5.  * (C)2003-2006 David "BAILOPAN" Anderson
  6.  *
  7.  *  Give credit where due.
  8.  *  Share the source - it sets you free
  9.  *  http://www.opensource.org/
  10.  *  http://www.gnu.org/
  11.  */
  12.  
  13. #include <amxmodx>
  14. #include <amxmisc>
  15. #include <fakemeta>
  16. #include <engine_const>
  17. #include <csdm>
  18.  
  19. new g_ProtColors[3][3] = {{0,0,0},{255,0,0},{0,0,255}}
  20. new g_GlowAlpha[3]
  21. new g_Protected[33]
  22. new bool:g_Enabled = false
  23. new Float:g_ProtTime = 2.0
  24.  
  25. //Tampering with the author and name lines can violate the copyright
  26. new PLUGINNAME[] = "CSDM Protection"
  27. new VERSION[] = CSDM_VERSION
  28. new AUTHORS[] = "BAILOPAN"
  29.  
  30. public csdm_Init(const version[])
  31. {
  32.     if (version[0] == 0)
  33.     {
  34.         set_fail_state("CSDM failed to load.")
  35.         return
  36.     }  
  37. }
  38.  
  39. public csdm_CfgInit()
  40. {
  41.     csdm_reg_cfg("protection", "read_cfg")
  42. }
  43.  
  44. stock set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16)
  45. {
  46.     set_pev(index, pev_renderfx, fx)
  47.     new Float:RenderColor[3]
  48.     RenderColor[0] = float(r)
  49.     RenderColor[1] = float(g)
  50.     RenderColor[2] = float(b)
  51.     set_pev(index, pev_rendercolor, RenderColor)
  52.     set_pev(index, pev_rendermode, render)
  53.     set_pev(index, pev_renderamt, float(amount))
  54.  
  55.     return 1
  56. }
  57.  
  58. public plugin_init()
  59. {
  60.     register_plugin(PLUGINNAME, VERSION, AUTHORS);
  61.     register_forward(FM_PlayerPreThink, "On_ClientPreThink", 1);
  62. }
  63.  
  64. public client_connect(id)
  65. {
  66.     g_Protected[id] = 0
  67. }
  68.  
  69. public client_disconnect(id)
  70. {
  71.     if (g_Protected[id])
  72.     {
  73.         remove_task(g_Protected[id])
  74.         g_Protected[id] = 0
  75.     }
  76. }
  77.  
  78. SetProtection(id)
  79. {
  80.     if (g_Protected[id])
  81.         remove_task(g_Protected[id])
  82.        
  83.     if (!is_user_connected(id))
  84.         return
  85.        
  86.     new team = get_user_team(id)
  87.    
  88.     if (!IsValidTeam(team))
  89.     {
  90.         return
  91.     }
  92.  
  93.     set_task(g_ProtTime, "ProtectionOver", id)
  94.     g_Protected[id] = id
  95.    
  96.     set_rendering(id, kRenderFxGlowShell, g_ProtColors[team][0], g_ProtColors[team][1], g_ProtColors[team][2], kRenderNormal, g_GlowAlpha[team])
  97.     set_pev(id, pev_takedamage, 0.0)
  98. }
  99.  
  100. RemoveProtection(id)
  101. {
  102.     if (g_Protected[id])
  103.         remove_task(g_Protected[id])
  104.        
  105.     ProtectionOver(id)
  106. }
  107.  
  108. public ProtectionOver(id)
  109. {
  110.     g_Protected[id] = 0
  111.    
  112.     if (!is_user_connected(id))
  113.         return
  114.    
  115.     set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  116.     set_pev(id, pev_takedamage, 2.0)
  117. }
  118.  
  119. public csdm_PostDeath(killer, victim, headshot, const weapon[])
  120. {
  121.     if (!g_Enabled)
  122.         return
  123.        
  124.     RemoveProtection(victim)
  125. }
  126.  
  127. public csdm_PostSpawn(player, bool:fake)
  128. {
  129.     SetProtection(player)
  130. }
  131.  
  132. public On_ClientPreThink(id)
  133. {
  134.     if (!g_Enabled || !g_Protected[id] || !is_user_connected(id))
  135.         return
  136.    
  137.     new buttons = pev(id,pev_button);
  138.      
  139.     if ( (buttons & IN_ATTACK) || (buttons & IN_ATTACK2) )
  140.     {
  141.         RemoveProtection(id)
  142.     }
  143. }
  144.  
  145. public read_cfg(readAction, line[], section[])
  146. {
  147.     if (!csdm_active())
  148.         return
  149.        
  150.     if (readAction == CFG_READ)
  151.     {
  152.         new setting[24], sign[3], value[32];
  153.  
  154.         parse(line, setting, 23, sign, 2, value, 31);
  155.        
  156.         if (equali(setting, "colorst"))
  157.         {
  158.             new red[10], green[10], blue[10], alpha[10]
  159.             parse(value, red, 9, green, 9, blue, 9, alpha, 9)
  160.            
  161.             g_ProtColors[_TEAM_T][0] = str_to_num(red)
  162.             g_ProtColors[_TEAM_T][1] = str_to_num(green)
  163.             g_ProtColors[_TEAM_T][2] = str_to_num(blue)
  164.             g_GlowAlpha[_TEAM_T] = str_to_num(alpha)
  165.         }
  166.         else if (equali(setting, "colorsct"))
  167.         {
  168.             new red[10], green[10], blue[10], alpha[10]
  169.             parse(value, red, 9, green, 9, blue, 9, alpha, 9)
  170.            
  171.             g_ProtColors[_TEAM_CT][0] = str_to_num(red)
  172.             g_ProtColors[_TEAM_CT][1] = str_to_num(green)
  173.             g_ProtColors[_TEAM_CT][2] = str_to_num(blue)
  174.             g_GlowAlpha[_TEAM_CT] = str_to_num(alpha)
  175.         }
  176.         else if (equali(setting, "enabled"))
  177.         {
  178.             g_Enabled = str_to_num(value) ? true : false
  179.         }
  180.         else if (equali(setting, "time"))
  181.         {
  182.             g_ProtTime = str_to_float(value)
  183.         }
  184.     }
  185. }


Igen tudom h csdm pluginba benne van, de a cél az lenne h egy pluginnal kevesebb legyen és a csdm modult megszüntessem a szerveren!


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve:2016.01.22. 11:58 
Offline
Jómunkásember

Csatlakozott:2014.10.30. 10:18
Hozzászólások:468
Megköszönt másnak: 235 alkalommal
Megköszönték neki: 34 alkalommal
A dupla posztért bocsánat! :)

Hát így is bele lehet tenni:

  1. //**********************************************************************
  2. // RESPAWN FUNCTIONS
  3. //**********************************************************************
  4.  
  5. // get all of our spawns into their arrays
  6. init_spawns()
  7. {
  8.     // grab CSDM file
  9.     new mapName[32], csdmFile[64], lineData[64];
  10.     get_configsdir(cfgDir,31);
  11.     get_mapname(mapName,31);
  12.     formatex(csdmFile,63,"%s/csdm/%s.spawns.cfg",cfgDir,mapName);
  13.  
  14.     // collect CSDM spawns
  15.     if(file_exists(csdmFile))
  16.     {
  17.         new csdmData[10][6];
  18.  
  19.         new file = fopen(csdmFile,"rt");
  20.         while(file && !feof(file))
  21.         {
  22.             fgets(file,lineData,63);
  23.  
  24.             // invalid spawn
  25.             if(!lineData[0] || str_count(lineData,' ') < 2)
  26.                 continue;
  27.  
  28.             // BREAK IT UP!
  29.             parse(lineData,csdmData[0],5,csdmData[1],5,csdmData[2],5,csdmData[3],5,csdmData[4],5,csdmData[5],5,csdmData[6],5,csdmData[7],5,csdmData[8],5,csdmData[9],5);
  30.  
  31.             // origin
  32.             spawns[spawnCount][0] = floatstr(csdmData[0]);
  33.             spawns[spawnCount][1] = floatstr(csdmData[1]);
  34.             spawns[spawnCount][2] = floatstr(csdmData[2]);
  35.  
  36.             // angles
  37.             spawns[spawnCount][3] = floatstr(csdmData[3]);
  38.             spawns[spawnCount][4] = floatstr(csdmData[4]);
  39.             spawns[spawnCount][5] = floatstr(csdmData[5]);
  40.  
  41.             // team, csdmData[6], unused
  42.  
  43.             // vangles
  44.             spawns[spawnCount][6] = floatstr(csdmData[7]);
  45.             spawns[spawnCount][7] = floatstr(csdmData[8]);
  46.             spawns[spawnCount][8] = floatstr(csdmData[9]);
  47.  
  48.             spawnCount++;
  49.             csdmSpawnCount++;
  50.             if(spawnCount >= MAX_SPAWNS) break;
  51.         }
  52.         if(file) fclose(file);
  53.     }
  54.  
  55.     // collect regular, boring spawns
  56.     else
  57.     {
  58.         collect_spawns("info_player_deathmatch");
  59.         collect_spawns("info_player_start");
  60.     }
  61. }
  62.  
  63. // collect boring spawns into our spawn data
  64. collect_spawns(classname[])
  65. {
  66.     new ent = maxPlayers, Float:spawnData[3];
  67.     while((ent = fm_find_ent_by_class(ent,classname)))
  68.     {
  69.         // origin
  70.         pev(ent,pev_origin,spawnData);
  71.         spawns[spawnCount][0] = spawnData[0];
  72.         spawns[spawnCount][1] = spawnData[1];
  73.         spawns[spawnCount][2] = spawnData[2];
  74.  
  75.         // angles
  76.         pev(ent,pev_angles,spawnData);
  77.         spawns[spawnCount][3] = spawnData[0];
  78.         spawns[spawnCount][4] = spawnData[1];
  79.         spawns[spawnCount][5] = spawnData[2];
  80.  
  81.         // vangles
  82.         spawns[spawnCount][6] = spawnData[0];
  83.         spawns[spawnCount][7] = spawnData[1];
  84.         spawns[spawnCount][8] = spawnData[2];
  85.  
  86.         spawnCount++;
  87.         if(spawnCount >= MAX_SPAWNS) break;
  88.     }
  89. }
  90.  
  91.  
  92. public restore_respawn(id,lvl,cid)
  93. {
  94.     if(!cmd_access(id,lvl,cid,1))
  95.         return PLUGIN_HANDLED
  96.  
  97.     new teamid = get_user_team(id)
  98.     if(teamid == 1 || teamid == 2)
  99.     {
  100.         if(g_StopRespawn[id])
  101.         {
  102.             g_StopRespawn[id] = false
  103.             begin_respawn(id)
  104.  
  105.             console_print(id, "Spawning is re-enable")
  106.             return PLUGIN_HANDLED
  107.         }
  108.         else
  109.         {
  110.             g_StopRespawn[id] = true
  111.             //user_silentkill(id)
  112.  
  113.             console_print(id, "Stop re-spawning")
  114.             return PLUGIN_HANDLED
  115.         }
  116.     }
  117.     return PLUGIN_CONTINUE
  118. }
  119.  
  120. // bring someone back to life
  121. public begin_respawn(id)
  122. {
  123.     if(!ggActive || !get_pcvar_num(gg_dm) || !is_user_connected(id) || g_StopRespawn[id])
  124.         return;
  125.  
  126.     // now on spectator
  127.     if(!on_valid_team(id)) return;
  128.    
  129.     // alive, and not in the broken sort of way
  130.     if(is_user_alive(id) && !pev(id,pev_iuser1))
  131.         return;
  132.  
  133.     // round is over, or bomb is planted
  134.     if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant)))
  135.         return;
  136.  
  137.     new Float:delay = get_pcvar_float(gg_dm_spawn_delay);
  138.     if(delay < 0.1) delay = 0.1;
  139.  
  140.     new dm_countdown = get_pcvar_num(gg_dm_countdown);
  141.  
  142.     if((dm_countdown & 1) || (dm_countdown & 2))
  143.     {
  144.         respawn_timeleft[id] = floatround(delay);
  145.         respawn_countdown(id);
  146.     }
  147.  
  148.     remove_task(TASK_RESPAWN+id);
  149.     set_task(delay,"respawn",TASK_RESPAWN+id);
  150. }
  151.  
  152. // show the respawn countdown to a player
  153. public respawn_countdown(id)
  154. {
  155.     if(!is_user_connected(id) || is_user_alive(id))
  156.     {
  157.         respawn_timeleft[id] = 0;
  158.         return;
  159.     }
  160.  
  161.     new dm_countdown = get_pcvar_num(gg_dm_countdown);
  162.  
  163.     if(dm_countdown & 1)
  164.         client_print(id,print_center,"%L",id,"RESPAWN_COUNTDOWN",respawn_timeleft[id]);
  165.    
  166.     if(dm_countdown & 2)
  167.     {
  168.         set_hudmessage(255,255,255,-1.0,0.75,0,6.0,1.0,0.1,0.5);
  169.         ShowSyncHudMsg(id,hudSyncCountdown,"%L",id,"RESPAWN_COUNTDOWN",respawn_timeleft[id]);
  170.     }
  171.  
  172.     if(--respawn_timeleft[id] >= 1) set_task(1.0,"respawn_countdown",id);
  173. }
  174.  
  175. // REALLY bring someone back to life
  176. public respawn(taskid)
  177. {
  178.     new id = taskid-TASK_RESPAWN;
  179.     if(!is_user_connected(id) || !ggActive) return;
  180.  
  181.     // round is over, or bomb is planted
  182.     if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant)))
  183.         return;
  184.  
  185.     // now on spectator
  186.     if(!on_valid_team(id)) return;
  187.  
  188.     // clear countdown
  189.     new dm_countdown = get_pcvar_num(gg_dm_countdown);
  190.     if(dm_countdown & 1) client_print(id,print_center," ");
  191.     if(dm_countdown & 2) ClearSyncHud(id,hudSyncCountdown);
  192.  
  193.     // alive, and not in the broken sort of way
  194.     if(is_user_alive(id)) return;
  195.    
  196.     static model[22];
  197.  
  198.     // remove his dropped weapons from before
  199.     new ent = maxPlayers;
  200.     while((ent = fm_find_ent_by_class(ent,"weaponbox")))
  201.     {
  202.         pev(ent,pev_model,model,21);
  203.  
  204.         // don't remove the bomb!! (thanks ToT | V!PER)
  205.         if(equal(model,"models/w_c4.mdl",15) || equal(model,"models/w_backpack.mdl"))
  206.             continue;
  207.  
  208.         // this is mine
  209.         if(pev(ent,pev_owner) == id) dllfunc(DLLFunc_Think,ent);
  210.     }
  211.  
  212.     new spawn_random = get_pcvar_num(gg_dm_spawn_random);
  213.     if(spawn_random) spawnSounds[id] = 0;
  214.  
  215.     ExecuteHamB(Ham_CS_RoundRespawn,id); // note the B
  216.  
  217.     if(spawn_random)
  218.     {
  219.         do_random_spawn(id,spawn_random);
  220.         spawnSounds[id] = 1;
  221.  
  222.         // to be fair, play a spawn noise at new location
  223.         engfunc(EngFunc_EmitSound,id,CHAN_ITEM,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM);
  224.     }
  225.  
  226.     new Float:time = get_pcvar_float(gg_dm_sp_time);
  227.     new mode = get_pcvar_num(gg_dm_sp_mode);
  228.     new buttons = pev(id,pev_button);
  229.  
  230.     // spawn protection
  231.     //if(time > 0.0 && mode && !(buttons & IN_ATTACK) && !(buttons & IN_ATTACK2))
  232.     if(time > 0.0 && mode)
  233.     {
  234.         spawnProtected[id] = 1;
  235.         if(mode == 2)
  236.         {
  237.             new team = get_user_team(id)
  238.             fm_set_user_godmode(id,1);
  239.            
  240.             if(team == 1)
  241.                    {
  242.                       fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 16)
  243.                    }
  244.             if(team == 2)
  245.                    {
  246.                       fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 16)
  247.                    }
  248.         }else fm_set_rendering(id,kRenderFxGlowShell,100,100,100,kRenderNormal,8); // gray/white
  249.        
  250.         set_task(time,"remove_spawn_protection",TASK_REMOVE_PROTECTION+id);
  251.        
  252.     }
  253. }
  254.  
  255. public On_ClientPreThink(taskid)
  256. {
  257.     new id = taskid;
  258.     new buttons = pev(id,pev_button);
  259.    
  260.     if (!spawnProtected[id] || !is_user_connected(id))
  261.         return;
  262.      
  263.     if ( (buttons & IN_ATTACK) || (buttons & IN_ATTACK2) )
  264.     {
  265.         RemoveProtection(taskid)
  266.     }
  267. }
  268.  
  269. RemoveProtection(taskid)
  270. {
  271.     new id = taskid;
  272.     if (spawnProtected[id])
  273.         remove_task(spawnProtected[id])
  274.        
  275.     ProtectionOver(id)
  276. }
  277.  
  278. public ProtectionOver(taskid)
  279. {
  280.     new id = taskid;
  281.     spawnProtected[id] = 0;
  282.  
  283.     if(!is_user_connected(id)) return;
  284.    
  285.     if(get_pcvar_num(gg_dm_sp_mode) == 2) fm_set_user_godmode(id,0);
  286.     fm_set_rendering(id); // reset back to normal
  287. }
  288.  
  289. // place a user at a random spawn
  290. do_random_spawn(id,spawn_random)
  291. {
  292.     // not even alive, don't bother
  293.     if(!is_user_alive(id)) return;
  294.  
  295.     // no spawns???
  296.     if(spawnCount <= 0) return;
  297.  
  298.     // no CSDM spawns, mode 2
  299.     if(spawn_random == 2 && !csdmSpawnCount)
  300.         return;
  301.  
  302.     static Float:vecHolder[3];
  303.     new sp_index = random_num(0,spawnCount-1);
  304.  
  305.     // get origin for comparisons
  306.     vecHolder[0] = spawns[sp_index][0];
  307.     vecHolder[1] = spawns[sp_index][1];
  308.     vecHolder[2] = spawns[sp_index][2];
  309.  
  310.     // this one is taken
  311.     if(!is_hull_vacant(vecHolder,HULL_HUMAN) && spawnCount > 1)
  312.     {
  313.         // attempt to pick another random one up to three times
  314.         new i;
  315.         for(i=0;i<3;i++)
  316.         {
  317.             sp_index = random_num(0,spawnCount-1);
  318.  
  319.             vecHolder[0] = spawns[sp_index][0];
  320.             vecHolder[1] = spawns[sp_index][1];
  321.             vecHolder[2] = spawns[sp_index][2];
  322.            
  323.             if(is_hull_vacant(vecHolder,HULL_HUMAN)) break;
  324.         }
  325.  
  326.         // we made it through the entire loop, no free spaces
  327.         if(i == 3)
  328.         {
  329.             // just find the first available
  330.             for(i=sp_index+1;i!=sp_index;i++)
  331.             {
  332.                 // start over when we reach the end
  333.                 if(i >= spawnCount) i = 0;
  334.  
  335.                 vecHolder[0] = spawns[i][0];
  336.                 vecHolder[1] = spawns[i][1];
  337.                 vecHolder[2] = spawns[i][2];
  338.  
  339.                 // free space! office space!
  340.                 if(is_hull_vacant(vecHolder,HULL_HUMAN))
  341.                 {
  342.                     sp_index = i;
  343.                     break;
  344.                 }
  345.             }
  346.         }
  347.     }
  348.  
  349.     // origin
  350.     vecHolder[0] = spawns[sp_index][0];
  351.     vecHolder[1] = spawns[sp_index][1];
  352.     vecHolder[2] = spawns[sp_index][2];
  353.     engfunc(EngFunc_SetOrigin,id,vecHolder);
  354.  
  355.     // angles
  356.     vecHolder[0] = spawns[sp_index][3];
  357.     vecHolder[1] = spawns[sp_index][4];
  358.     vecHolder[2] = spawns[sp_index][5];
  359.     set_pev(id,pev_angles,vecHolder);
  360.  
  361.     // vangles
  362.     vecHolder[0] = spawns[sp_index][6];
  363.     vecHolder[1] = spawns[sp_index][7];
  364.     vecHolder[2] = spawns[sp_index][8];
  365.     set_pev(id,pev_v_angle,vecHolder);
  366.  
  367.     set_pev(id,pev_fixangle,1);
  368. }
  369.  
  370. // get rid of the spawn protection effects
  371. public remove_spawn_protection(taskid)
  372. {
  373.     new id = taskid-TASK_REMOVE_PROTECTION;
  374.     spawnProtected[id] = 0;
  375.  
  376.     if(!is_user_connected(id)) return;
  377.    
  378.     if(get_pcvar_num(gg_dm_sp_mode) == 2) fm_set_user_godmode(id,0);
  379.     fm_set_rendering(id); // reset back to normal
  380. }


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 24 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole