ЗАКРЫТЬ
Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

^Место доступно для покупки - 3500 руб/мес^

Наши новости:

11-апр
02-дек
17-апр
30-дек



Раскрутка Counter-Strike 1.6

[CS GO] проблема с выдачей денег

Статус пользователя ex3m777
сообщение 13.6.2015, 18:51
Сообщение #1


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

Подскажите, почему не работает выдача денег??

Код:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

public OnPluginStart()
{
HookEvent("round_start", Event_RoundStart);
HookEvent("cs_match_end_restart", Event_RestartRound);
HookEvent("round_end", round_end);

}

new round_counter = 0;

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
round_counter++;
}

public Event_RestartRound(Handle:event, const String:name[], bool:dontBroadcast)
{
round_counter = 0;
}

public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));

if (client > 0 && IsPlayerAlive(client) && (round_counter > 1))
{
if (IsPlayerGenericAdmin(client))
{
new Cash = GetEntProp(client, Prop_Send, "m_iAccount");
if(Cash < 16000) SetEntProp(client, Prop_Send, "m_iAccount", Cash + 1500);
else if(Cash >= 16000) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
}
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
return CheckCommandAccess(client, "generic_admin", ADMFLAG_GENERIC, false);
}


по идее все сделано правильно, вольво снова накосячила??


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 13.6.2015, 20:19
Сообщение #2


Иконка группы

Стаж: 11 лет

Сообщений: 3619
Благодарностей: 1705
Полезность: 1010

Меценат Меценат

Код:
public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));

это как так?
разве это событие содержит id игрока?
откуда ты userid взял?
тут нужен цикл по игрокам
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 13.6.2015, 20:33
Сообщение #3


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

Цитата(Legenda @ 13.6.2015, 21:19) *
Код:
public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));

это как так?
разве это событие содержит id игрока?
откуда ты userid взял?
тут нужен цикл по игрокам

Я уже понял что тут ошибка, но вот такой код тоже не дает эффекта! выдается все кроме денег

Код:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

public OnPluginStart()
{
HookEvent("round_start", Event_RoundStart);
HookEvent("cs_match_end_restart", Event_RestartRound);
HookEvent("player_spawn", Event_OnPlayerSpawn);
}

new round_counter = 0;

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
round_counter++;
}

public Event_RestartRound(Handle:event, const String:name[], bool:dontBroadcast)
{
round_counter = 0;
}

public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
new team = GetClientTeam(client);

if (client > 0 && IsPlayerAlive(client))
{
if (IsPlayerGenericAdmin(client))
{
SetEntityHealth(client, 105); //hp
SetEntProp(client, Prop_Send, "m_ArmorValue", 100, 4); //armor
SetEntProp(client, Prop_Send, "m_bHasHelmet", 1); //helm

GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_hegrenade"); //grenade

if(team == CS_TEAM_CT)
{
GivePlayerItem(client, "item_defuser"); //kombinerki
}

if (round_counter > 1)
{
new Cash = GetEntProp(client, Prop_Send, "m_iAccount");
if(Cash < 16000) SetEntProp(client, Prop_Send, "m_iAccount", Cash + 1500);
else if(Cash >= 16000) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
}
}
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
return CheckCommandAccess(client, "generic_admin", ADMFLAG_GENERIC, false);
}


Отредактировал: ex3m777, - 13.6.2015, 20:42


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Revelation
сообщение 13.6.2015, 20:44
Сообщение #4
Стаж: 8 лет 8 месяцев

Сообщений: 1051
Благодарностей: 401
Полезность: 1075

ex3m777, Цикла по игрокам-то все равно нет... Не учли замечание из 2 поста.

Код:
new g_iAccount = -1;

public OnPluginStart()
{
g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
}

// В нужном месте выдаем:
if (g_iAccount != -1)
{
SetEntData(client, g_iAccount, 16000);
}


Отредактировал: Revelation, - 13.6.2015, 20:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 13.6.2015, 20:48
Сообщение #5
Стаж: 7 лет 3 месяца

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Revelation, эвент спавн по идее для каждого игрока выполнятеся, поэтому цикл не нужен
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 13.6.2015, 21:01
Сообщение #6


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

Цитата(Revelation @ 13.6.2015, 21:44) *
ex3m777, Цикла по игрокам-то все равно нет... Не учли замечание из 2 поста.

Код:
new g_iAccount = -1;

public OnPluginStart()
{
g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
}

// В нужном месте выдаем:
if (g_iAccount != -1)
{
SetEntData(client, g_iAccount, 16000);
}

Код:
			if (round_counter > 1)
{
new Cash = GetEntProp(client, Prop_Send, "g_iAccount");
if (g_iAccount != -1)
{
SetEntData(client, g_iAccount, Cash + 1500);
}
}

правильно?

Отредактировал: ex3m777, - 13.6.2015, 21:07


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 13.6.2015, 21:42
Сообщение #7


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

поставил так и все ровно не выдает деньги

Код:

#include <sourcemod>
#include <sdktools>
#include <cstrike>

new round_counter = 0;
new g_iAccount = -1;

public OnPluginStart()
{
HookEvent("round_start", Event_RoundStart);
HookEvent("cs_match_end_restart", Event_RestartRound);
HookEvent("player_spawn", Event_OnPlayerSpawn);
g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
}

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
round_counter++;
}

public Event_RestartRound(Handle:event, const String:name[], bool:dontBroadcast)
{
round_counter = 0;
}

public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
new team = GetClientTeam(client);

if (client > 0 && IsPlayerAlive(client))
{
if (IsPlayerGenericAdmin(client))
{
SetEntityHealth(client, 105); //hp
SetEntProp(client, Prop_Send, "m_ArmorValue", 100, 4); //armor
SetEntProp(client, Prop_Send, "m_bHasHelmet", 1); //helm

GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_hegrenade"); //grenade

if(team == CS_TEAM_CT)
{
GivePlayerItem(client, "item_defuser");
}

if ((round_counter > 1) && (g_iAccount != -1))
{
SetEntData(client, g_iAccount, 10000);
}
}
}
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
return CheckCommandAccess(client, "generic_admin", ADMFLAG_GENERIC, false);
}


Отредактировал: ex3m777, - 13.6.2015, 22:06


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 13.6.2015, 22:27
Сообщение #8
Стаж: 7 лет 3 месяца

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

ex3m777, попробуй сделать задержку в 0.5-1 секунду, или возможно заюзать csgo эвент player_spawned
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Revelation
сообщение 13.6.2015, 23:32
Сообщение #9
Стаж: 8 лет 8 месяцев

Сообщений: 1051
Благодарностей: 401
Полезность: 1075

voed, не заметил, что он на спавн переделал.

ex3m777,
Попробуй убрать проверку:
Код:
if (g_iAccount != -1)


Код:
IsPlayerAlive(client)

Зачем проверять игрока на спавне? Он итак живой.

По поводу счетчика... Можно немного облегчить задачу, не мудохаться с переменными.
В #include <sdktools_functions> есть функция GetTeamScore(id), которая получает счет команды.
Можно сделать проще проверку:
Код:
if (GetTeamScore(2)+GetTeamScore(3) > 1) ...


С точки зрения оптимизации не очень хорошо постоянно игрока проверять игрока на права при каждом спавне. Можно сделать проверку игрока на флаг при его подключении один раз и все, присвоить ему какую-нибудь булевую переменную и уже дальше проверять его на спавне, является ли он админом или нет.

Отредактировал: Revelation, - 13.6.2015, 23:33
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 13.6.2015, 23:51
Сообщение #10


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

Вот что у меня получилось

Код:
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdktools_functions>

new g_iAccount = -1;

public OnPluginStart()
{
HookEvent("player_spawn", Event_OnPlayerSpawn);
g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
}

public Event_OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event, "userid"));
new team = GetClientTeam(client);

if (client > 0)
{
if (IsPlayerGenericAdmin(client))
{
SetEntityHealth(client, 105); //hp
SetEntProp(client, Prop_Send, "m_ArmorValue", 100, 4); //armor
SetEntProp(client, Prop_Send, "m_bHasHelmet", 1); //helm

GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_hegrenade"); //grenade

if(team == CS_TEAM_CT)
{
GivePlayerItem(client, "item_defuser");
}

if(GetTeamScore(2)+GetTeamScore(3) > 1)
{
SetEntData(client, g_iAccount, 10000);
}
}
}
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
return CheckCommandAccess(client, "generic_admin", ADMFLAG_GENERIC, false);
}


но все ровно не дает деньги
на счет булевой функции, Я не знаю как это сделать, можно на примере?

Отредактировал: ex3m777, - 13.6.2015, 23:51


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 14.6.2015, 0:30
Сообщение #11


Иконка группы

Стаж: 11 лет

Сообщений: 3619
Благодарностей: 1705
Полезность: 1010

Меценат Меценат

удалить
Код:
         if(GetTeamScore(2)+GetTeamScore(3) > 1)
{
SetEntData(client, g_iAccount, 10000);
}


прописать
Код:
SetEntProp(Client, Prop_Send, "m_iAccount", 16000);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 14.6.2015, 0:37
Сообщение #12


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

Цитата(Legenda @ 14.6.2015, 1:30) *
удалить
Код:
         if(GetTeamScore(2)+GetTeamScore(3) > 1)
{
SetEntData(client, g_iAccount, 10000);
}


прописать
Код:
SetEntProp(Client, Prop_Send, "m_iAccount", 16000);

но в этом случае админ будет иметь 16000 даже в раунде на пистолетах, такое не подходит

Отредактировал: ex3m777, - 14.6.2015, 0:38


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 14.6.2015, 11:54
Сообщение #13


Иконка группы

Стаж: 11 лет

Сообщений: 3619
Благодарностей: 1705
Полезность: 1010

Меценат Меценат

ну так добавь проверку на номер раунда
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 14.6.2015, 12:22
Сообщение #14


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

Legenda, Я делал вот так.. и не работало..

Код:
		 if(GetTeamScore(2)+GetTeamScore(3) > 1)
{
SetEntProp(Client, Prop_Send, "m_iAccount", 16000);
}


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 14.6.2015, 22:37
Сообщение #15


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

на этом идеи закончились как Я понял.. даже на оленях молчат..(


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 15.6.2015, 1:30
Сообщение #16


Иконка группы

Стаж: 11 лет

Сообщений: 3619
Благодарностей: 1705
Полезность: 1010

Меценат Меценат

Цитата(ex3m777 @ 14.6.2015, 13:22) *
Legenda, Я делал вот так.. и не работало..

Код:
		 if(GetTeamScore(2)+GetTeamScore(3) > 1)
{
SetEntProp(Client, Prop_Send, "m_iAccount", 16000);
}


Код:
if (GetTeamScore(CS_TEAM_T)+GetTeamScore(CS_TEAM_CT) > 1)
SetEntProp(Client, Prop_Send, "m_iAccount", 16000);

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ex3m777
сообщение 15.6.2015, 12:00
Сообщение #17


Стаж: 8 лет 8 месяцев
Город: Москва

Сообщений: 2037
Благодарностей: 1133
Полезность: 967

Меценат Меценат

полностью переписал плагин..работает

Код:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

public OnPluginStart()
{
HookEvent("round_start", roundStart);
}

public Action:roundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
for ( new client = 1 ; client <= MaxClients+1 ; client++){
if (IsPlayerGenericAdmin(client)){
if (IsValidClient(client, true)){
new team = GetClientTeam(client);
SetEntProp(client, Prop_Send, "m_ArmorValue", 100, 4); //armor
SetEntProp(client, Prop_Send, "m_bHasHelmet", 1); //helm

GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_flashbang"); //flash
GivePlayerItem(client, "weapon_hegrenade"); //grenade

if (GetTeamScore(CS_TEAM_T)+GetTeamScore(CS_TEAM_CT) > 1){
decl CurrentMoney;
CurrentMoney = GetEntProp(client, Prop_Send, "m_iAccount");
SetEntProp(client, Prop_Send, "m_iAccount", CurrentMoney + 1500);
}

if(team == CS_TEAM_CT)
{
GivePlayerItem(client, "item_defuser");
}
}
}
}
}

bool:IsPlayerGenericAdmin(client)
{
return CheckCommandAccess(client, "generic_admin", ADMFLAG_GENERIC, false);
}

bool:IsValidClient(client, bool:alive = false)
{
return (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && (alive == false || IsPlayerAlive(client)));
}


source pawn увлекательная штука))

Отредактировал: ex3m777, - 15.6.2015, 12:06


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: