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

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

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

14-дек
24-апр
10-апр
11-апр

Помощь с руной...

, По плагину RuneMod-а
Статус пользователя CH0CAPIC
сообщение 7.10.2014, 18:15
Сообщение #1


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Здравствуйте ! Обнаружил баг в одной из рун (runemod_kamikadze). По правилу, когда игрока, имеющий эту руну, убьют, то он взрывается и взрывает всех (врагов, не союзников), кто попадёт под радиус поражения. Баг заключается в том, что когда игрок имеет эту руну и решает перейти за другую команду, то взрывается как этот игрок, так и его ВСЕ РЯДОМ НАХОДЯЩИЕСЯ СОЮЗНИКИ. Как можно прикрыть даннай баг? Что прописать при отлове смерти?

Код:
#include <amxmodx>
#include <engine>
#include <fun>
#include "runemod.inc" // We need to include this file, as it contains info we need. Like #define`s and stocks

#define MaxDmg 1800
#define ExplRange 250.0

#define DmgPrPoint = ExplRange / StartDMG
new g_HasRune[MAXPLAYERS+1] // This is the Array used to store if the user is holding a rune.(Remember the base plugin informs this plugin once he picks up a rune.)
new g_MaxPlayers

new g_iMsgSayText

public plugin_init()
{
register_plugin("RuneMod Kamikaze", "1.0.0", "EKS")
g_MaxPlayers = get_maxplayers()
RegisterPlugin("KamikazeName","KamikazeDesc",{250,190,80},API_USELANGSYSTEM)

g_iMsgSayText = get_user_msgid("SayText")
}


public API_DropedRune(id,Reason) //This function is called by the base plugin to inform about the user droped his rune for whatever reason ( he could have used droprune or died )
{
g_HasRune[id] = 0

if(Reason == USER_DIED)
{
set_task(0.1,"Task_MakeExpl",id,_,_,"a",1)
}
}
public Task_MakeExpl(id)
{
new Origin[3]
new Team = get_user_team(id)
new Float:Dist

get_user_origin(id,Origin)
for(new i=0;i<=3;i++)
{
MakeExpl(id,Origin)
MakeSmoke(id,Origin)
}

for(new i=1;i<=g_MaxPlayers;i++) if(is_user_alive(i) && get_user_team(i) != Team)
{
Dist = entity_range(id,i)
if(Dist < ExplRange)
{
RadiusDmg(id,i,Dist)
}
}
}
stock RadiusDmg(attacker,victim,Float:Dist)
{
new Float:Dmg = MaxDmg * (1 - Dist/ExplRange)

new Float:HP = entity_get_float(victim, EV_FL_health)
if(HP > Dmg)
{
entity_set_float(victim, EV_FL_health,(HP-Dmg))

new Name[32]
get_user_name(victim,Name,31)
ChatColor(attacker,"You did %.0f Damage on %s",Dmg,Name)
}
else
RegisterKill(attacker,victim,"Kamikaze")
}
// This function is used base plugin to inform this plugin that a user has picked up the rune.
public API_PickUpRune(id)
{
g_HasRune[id] = 1
}

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color


if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fintok
сообщение 7.10.2014, 18:41
Сообщение #2


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

CH0CAPIC, попробуй считывать команду игрока во время получения руны, а не во время его смерти.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 7.10.2014, 18:54
Сообщение #3


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(Fintok @ 7.10.2014, 17:41) *
CH0CAPIC, попробуй считывать команду игрока во время получения руны, а не во время его смерти.


Не думаю, что это будет правильным, но всё равно рискнул.

Код:
public API_PickUpRune(id, Reason) 
{
g_HasRune[id] = 1

if(Reason == USER_DIED)
{
set_task(0.1,"Task_MakeExpl",id,_,_,"a",1)
}
}


Взрыв происходит во время взятия руны...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
kreat1ff
сообщение 7.10.2014, 19:04
Сообщение #4
Стаж: 15 лет

Сообщений: 1780
Благодарностей: 640
Полезность: 0

там вроде баг был когда много людей все бессмертные
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 7.10.2014, 19:05
Сообщение #5


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(kreat1ff @ 7.10.2014, 18:04) *
там вроде баг был когда много людей все бессмертные

Такого нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 7.10.2014, 19:14
Сообщение #6


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

CH0CAPIC, cbf1b2bfde1a.gif
Код:

new g_szTeam[MAX_PLAYERS+1]

public API_PickUpRune(id, Reason)
{
g_HasRune[id] = 1

g_szTeam[id] = get_user_team(id)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
kreat1ff
сообщение 7.10.2014, 19:15
Сообщение #7
Стаж: 15 лет

Сообщений: 1780
Благодарностей: 640
Полезность: 0

Цитата(CH0CAPIC @ 7.10.2014, 20:05) *
Такого нет.

я помню ккогда то году в 8 играл на проекте maxplayers.ru там был сервер рун мод, потом спустя время захотел поиграть на таком снова..но не нашел ни одного сервера с таким модом...решил сделать сам..но раз за разом с этим глюком сталкивался...в итоге имея практически нулевые знания в скриптинге эту идею забросил)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 7.10.2014, 19:28
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

я писал немного под этот мод


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 7.10.2014, 19:40
Сообщение #9


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

CH0CAPIC, попробуй вначале этот вариант, а потом уже тот, что предложил я раньше.
Я не уверен, что этот вариант будет вообще работать.
Код:
#include <amxmodx>
#include <engine>
#include <fun>
#include "runemod.inc" // We need to include this file, as it contains info we need. Like #define`s and stocks

#define MaxDmg 1800
#define ExplRange 250.0

#define DmgPrPoint = ExplRange / StartDMG

// This is the Array used to store if the user is holding a rune.(Remember the base plugin informs this plugin once he picks up a rune.)
new g_HasRune[MAXPLAYERS+1]

new g_iMsgSayText

public plugin_init()
{
register_plugin("RuneMod Kamikaze", "1.0.0", "EKS")

RegisterPlugin("KamikazeName","KamikazeDesc",{250,190,80},API_USELANGSYSTEM)

register_event("DeathMsg", "ev_DeathMsg", "a")

g_iMsgSayText = get_user_msgid("SayText")
}

public ev_DeathMsg()
{
new victim = read_data(2)

if(!is_user_connected(victim) || !g_HasRune[victim])
return

new Origin[3]
get_user_origin(victim, Origin)

for(new i = 0; i <= 3; i++)
{
MakeExpl(victim, Origin)
MakeSmoke(victim, Origin)
}

new Team = get_user_team(victim)
new Float:Dist

new iPlayers[32], iNum, id
get_players(iPlayers, iNum, "ah")

for(new i = 0; i < iNum; i++)
{
id = iPlayers[i]

if(get_user_team(id) != Team)
{
Dist = entity_range(victim, id)

if(Dist < ExplRange)
RadiusDmg(victim, id, Dist)
}
}
}

stock RadiusDmg(attacker,victim,Float:Dist)
{
new Float:Dmg = MaxDmg * (1 - Dist/ExplRange)

new Float:HP = entity_get_float(victim, EV_FL_health)
if(HP > Dmg)
{
entity_set_float(victim, EV_FL_health,(HP-Dmg))

new Name[32]
get_user_name(victim,Name,31)
ChatColor(attacker,"You did %.0f Damage on %s",Dmg,Name)
}
else
RegisterKill(attacker,victim,"Kamikaze")
}

// This function is used base plugin to inform this plugin that a user has picked up the rune.
public API_PickUpRune(id)
g_HasRune[id] = 1

//This function is called by the base plugin to inform about the user droped his rune for whatever reason ( he could have used droprune or died )
public API_DropedRune(id)
g_HasRune[id] = 0

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: