Raised This Month: $51 Target: $400
 12% 

Kill Humans in round end


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
TheRunningMan
Member
Join Date: Aug 2011
Location: Russia
Old 10-07-2011 , 05:37   Kill Humans in round end
Reply With Quote #1

Hello! I want to write a plugin for zombie mod! He has to kill the survivors if the round was over! The expression
PHP Code:
ForTimer = (((g_cvarRoundTime*60) + (g_cvarFreezeTime)) - (+ (g_cvarFreezeTime))); 
calculates the time for the timer, x - this time was left of the round, in my case 3 seconds (ie 0.03)!
All of this works, but it always kills me (no matter, zombie or human), sometimes it kills all players....
In general, if you understand me help solve these problems or suggest an easier way ....
P.S. I am a complete noob to programming in sourcepawn)


Здравствуйте! Я хочу написать плагин для зомби мода! Он должен убивать выживших людей, если кончилось время раунда! Данное выражение
PHP Code:
ForTimer = (((g_cvarRoundTime*60) + (g_cvarFreezeTime)) - (+ (g_cvarFreezeTime))); 
вычисляет время для таймера, x - это время которое останется от раунда, в моем случае 3 секунды (т.е. 0.03)!
Все это работает,но он постоянно убивает Меня(неважно зомби или human), иногда он убивает всех....
В общем, если вы меня поняли помогите решить эти проблемы или предложите более легкий способ....
P.S. Я полный нуб в программировании в sourcepawn)
PHP Code:
#include <zombiereloaded>
#include <sdkhooks>
#include <sdktools>
#include <sourcemod>


new Handle:cvarRoundTime  INVALID_HANDLE;
new 
Handle:cvarFreezeTime INVALID_HANDLE;

new 
Float:g_cvarRoundTime;
new 
Float:g_cvarFreezeTime;

new 
Handle:Seconds[MAXPLAYERS+1] = {INVALID_HANDLE, ...};

new 
Float:ForTimer[MAXPLAYERS+1];
    
public 
OnPluginStart()
{
    
HookEvent("round_start"RoundTime);
}
public 
OnMapStart()
{
    
cvarRoundTime FindConVar("mp_roundtime");
    
cvarFreezeTime FindConVar("mp_freezetime");

    
g_cvarRoundTime GetConVarFloat(cvarRoundTime);
    
g_cvarFreezeTime GetConVarFloat(cvarFreezeTime);

    
ForTimer = (((g_cvarRoundTime*60) + (g_cvarFreezeTime)) - (3.0 + (g_cvarFreezeTime)));
}

public 
ActionRoundTime(Handle:event, const String:name[], bool:dontBroadcast)
{    
    for(new 
Client 1Client <= MaxClientsClient++) 
    {
       if(
IsClientInGame(Client) && IsClientConnected(Client)) 
        {    
            
PrintToChat(Client"Round start: %0.2f"g_cvarRoundTime);

            
Seconds[Client] = CreateTimer(ForTimerkillerClient);
        }
    }
}

public 
Actionkiller(Handle:timerany:Client)
{        

    if ( 
ZR_IsClientHuman(Client) && IsPlayerAlive(Client))
    {
        
SetEntityHealth(Client1);
        
SlapPlayer(Client1false)
    }
    
    return 
Plugin_Handled;
}

public 
OnPluginEnd() 
{
    
UnhookEvent("round_start"RoundTime);


Last edited by TheRunningMan; 10-08-2011 at 02:23.
TheRunningMan is offline
maza51
Senior Member
Join Date: Mar 2010
Old 10-07-2011 , 13:01   Re: Kill Humans in round end
Reply With Quote #2

Не проще использовать хук "round_end" ?
И проверяйте зомби клиент или нет. "ZR_IsClientZombie"

Is not it easier to use the hook "round_end"?
And check zombie client or not. "ZR_IsClientZombie"
maza51 is offline
TheRunningMan
Member
Join Date: Aug 2011
Location: Russia
Old 10-08-2011 , 02:21   Re: Kill Humans in round end
Reply With Quote #3

какова ситуация сейчас..
в конце раунда когда часы дойдут до 0 никто не умирают и выигрывают люди, а мне надо чтоб умирали люди и выигрывали террористы(зомбы)....
Как сделать через энд раунд если сначала люди выиграют, а потом плагин их убьет...

What is the situation now ..
at the end of the round the clock to reach 0, and no one die humans wins, and I need Humans to die and the terrorists(zombie ) have win ....
How to make a round End if people win first, and then plugin them kill ...
TheRunningMan is offline
maza51
Senior Member
Join Date: Mar 2010
Old 10-08-2011 , 02:59   Re: Kill Humans in round end
Reply With Quote #4

PHP Code:
HookEvent("round_end",  Event_EndRoundEventHookMode_Post); 
PHP Code:
public Action:Event_EndRound(Handle:event, const String:name[], bool:dontBroadcast
{     
    for (new 
Client 1Client <= MaxClientsClient++)  
    { 
        if(
IsClientInGame(Client) && IsPlayerAlive(Client) && ZR_IsClientHuman(Client))  
        {
            
ForcePlayerSuicide(client);
        } 
    }

maza51 is offline
Frenzzy
SourceMod Donor
Join Date: Jan 2007
Location: Russia
Old 10-08-2011 , 03:00   Re: Kill Humans in round end
Reply With Quote #5

Чтобы была победа зомби, можно сделать следующее:

1. Открыть в блокноте файл «../zr/modules/zrc_core/gameplay.zrc.inc»
2. Найти там функцию «public Action:ZRCGPlay_RoundEndTimer(Handle:timer)»
3. Найти в этой функции строку «new team = TLib_GetGameTeamIndex(VTeam_Human);»
4. Заменить «VTeam_Human» на «VTeam_Zombie»
5. Скомпилировать плагин

И тогда убивать людей можно просто по событию «round_end», например как указано в предыдущем посте
Frenzzy is offline
Send a message via ICQ to Frenzzy Send a message via MSN to Frenzzy Send a message via Skype™ to Frenzzy
TheRunningMan
Member
Join Date: Aug 2011
Location: Russia
Old 10-08-2011 , 03:19   Re: Kill Humans in round end
Reply With Quote #6

Quote:
Originally Posted by maza51 View Post
PHP Code:
HookEvent("round_end",  Event_EndRoundEventHookMode_Post); 
PHP Code:
public Action:Event_EndRound(Handle:event, const String:name[], bool:dontBroadcast
{     
    for (new 
Client 1Client <= MaxClientsClient++)  
    { 
        if(
IsClientInGame(Client) && IsPlayerAlive(Client) && ZR_IsClientHuman(Client))  
        {
            
ForcePlayerSuicide(client);
        } 
    }

Попробовал с ботами, всегда убивает в конце раунда и зомбов и людей...

Нашел ошибку, надо не EventHookMode_Post, а EventHookMode_Pre...

Last edited by TheRunningMan; 10-08-2011 at 04:22.
TheRunningMan is offline
TheRunningMan
Member
Join Date: Aug 2011
Location: Russia
Old 10-08-2011 , 03:21   Re: Kill Humans in round end
Reply With Quote #7

Quote:
Originally Posted by Frenzzy View Post
Чтобы была победа зомби, можно сделать следующее:

1. Открыть в блокноте файл «../zr/modules/zrc_core/gameplay.zrc.inc»
2. Найти там функцию «public Action:ZRCGPlay_RoundEndTimer(Handle:timer)»
3. Найти в этой функции строку «new team = TLib_GetGameTeamIndex(VTeam_Human);»
4. Заменить «VTeam_Human» на «VTeam_Zombie»
5. Скомпилировать плагин

И тогда убивать людей можно просто по событию «round_end», например как указано в предыдущем посте
Мне надо чтоб это было на определенных картах, а не всегда...
Да и вообще я этого файла не нашел...

Last edited by TheRunningMan; 10-08-2011 at 03:24.
TheRunningMan is offline
TheRunningMan
Member
Join Date: Aug 2011
Location: Russia
Old 10-08-2011 , 12:01   Re: Kill Humans in round end
Reply With Quote #8

Help me please!
Explain what I did wrong ...
TheRunningMan is offline
TnTSCS
AlliedModders Donor
Join Date: Oct 2010
Location: Undisclosed...
Old 10-08-2011 , 12:07   Re: Kill Humans in round end
Reply With Quote #9

Quote:
Originally Posted by TheRunningMan View Post
Help me please!
Explain what I did wrong ...
lawl... I'm not going to translate all of that
TnTSCS is offline
TheRunningMan
Member
Join Date: Aug 2011
Location: Russia
Old 10-08-2011 , 12:30   Re: Kill Humans in round end
Reply With Quote #10

Quote:
Originally Posted by TnTSCS View Post
lawl... I'm not going to translate all of that
Read only my first post
TheRunningMan is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:28.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode