Rectf

Сообщения
31
Реакции
30
Помог
1 раз(а)
На ds как то прохладно отнеслись к помощи переделать плагин, может быть тут кто захочет глянуть(5к+ строк кода). А пока у меня пару вопросов по тому что я наковырял сам с ним.

1-ый: Можно ли улучшить или избавиться от postThink? Меняет скорость игрока при использование щита. Что лучше каждый раз дергать reapi функцию на проверку наличия щита или запихнуть глобальную переменную для игрока в RG_CBasePlayer_GiveShield и RG_CBasePlayer_DropShield. Хотелось бы вообще от postthink избавится но не потерять этот функционал...

Код:
public client_PostThink(id)
{
if(!g_bAlive[id])
return

if(get_member(id,m_bOwnsShield))
{
if(get_member(id,m_bShieldDrawn))
{
g_fWeaponSpeed[id] = 180.0
player_updateSpeed(id)
}
else
{
g_fWeaponSpeed[id] = 250.0
player_updateSpeed(id)
}
}
}


2-ой вопрос, при замене этого кода, на rg_round_respawn(id) игроки стали жаловаться на медленную скорость бега, в какой момент у них это происходит я так и не смог от них добиться, сам же никак не мог поймать ни на тестовом ни на боевом сервере, предположительно не снимается глобальная переменная наличия флага у игрока, т.к. при добавление player_updateSpeed(id) ситуация не исправилась, EV_INT_iuser1 туда я как понял помещаются переменные которые вещаются на игрока, вроде в коде нигде этого не происходит, как то исправить можно или оставить как есть?:
Код:
        
entity_set_int(id, EV_INT_deadflag, DEAD_RESPAWNABLE)
entity_set_int(id, EV_INT_iuser1, 0)
entity_think(id)
entity_spawn(id)


3-ий вопрос, закомментированое условие не работает, а именно !get_member(id,m_bHasC4), он просто игнорирует это и подбирает бомбу.:

Код:
public c4_pickup(ent, id)
{

///////////2 test
/// not work, bomb is remove from ground: if(g_bAlive[id] && is_entity(ent) && (entity_get_int(ent, EV_INT_flags) & FL_ONGROUND) && get_member(ent,m_WeaponBox_bIsBomb) && !get_member(id,m_bHasC4)))
if(g_bAlive[id] && is_entity(ent) && (entity_get_int(ent, EV_INT_flags) & FL_ONGROUND) && get_member(ent,m_WeaponBox_bIsBomb))
{
if(get_member(id,m_bHasC4))
return PLUGIN_HANDLED
player_giveC4(id)
remove_entity(ent)
return PLUGIN_HANDLED
}


з.ы. может и тупо переделывать так плагин заменяя тупо функции на reapi, но плагин стал по шустрее работать и нагрузки поменьше.
 

Вложения

Сообщения
678
Реакции
580
Предупреждения
8
Помог
9 раз(а)
1-ый: Можно ли улучшить или избавиться от postThink?
исходник пока не смотрел но уже есть решение
Код:
Ham_CS_Item_GetMaxSpeed

или
Код:
Ham_Weapon_SecondaryAttack



PS. Плагин уже пугает даже с такими кусками кода(!)
 
Последнее редактирование:
Сообщения
31
Реакции
30
Помог
1 раз(а)
Код:
RegisterHam( Ham_CS_Item_GetMaxSpeed, "weapon_shield" , "CS_Item_GetMaxSpeed_Pre", .Post = 0 )

не пройдет т.к. нашел пример от Safety1st и там вот такой коммент: weapon_shield // it is not a weapon in common sense
тоже самое и с Ham_Weapon_SecondaryAttack, но можно зарегистрировать все пистолеты, гранаты и нож и проверять наличие щита

Нашел RG_CBasePlayer_ResetMaxSpeed но это только хук без возврата я так понял судя по описанию, судя по логам в консоль(что я наделал в тестах), сначала отрабатывает Ham_Weapon_SecondaryAttack поэтому минус его, потом RG_CBasePlayer_ResetMaxSpeed, а вот скорость игроку возвращает Ham_CS_Item_GetMaxSpeed

В общем по примеру от Safety1st сделал:

Код:
public plugin_init()
{
...
RegisterForwards4SettingSpeed()
...
}


...

RegisterForwards4SettingSpeed() {
// just for convenience (function could be easily collapsed)

new szItemName[][] = {
"weapon_p228",
"weapon_knife",
"weapon_fiveseven",
"weapon_usp",
"weapon_glock18",
"weapon_deagle",
"weapon_hegrenade",
"weapon_smokegrenade",
"weapon_flashbang",
}

for( new j; j < sizeof szItemName; j++ )
RegisterHam( Ham_CS_Item_GetMaxSpeed, szItemName[j] , "CS_Item_GetMaxSpeed_Pre", .Post = 0 )
}


public CS_Item_GetMaxSpeed_Pre( weapon ) {

new id = pev(weapon,pev_owner)

new Float:fSpeed = 1.0

if(player_hasFlag(id))
fSpeed *= SPEED_FLAG

#if FEATURE_ADRENALINE == true

if(g_iAdrenalineUse[id] == ADRENALINE_SPEED)
fSpeed *= SPEED_ADRENALINE

#endif // FEATURE_ADRENALINE

if(get_member(id,m_bOwnsShield))
{
if(get_member(id,m_bShieldDrawn))
{
g_fWeaponSpeed[id] = 180.0
SetHamReturnFloat( g_fWeaponSpeed[id] * fSpeed )
return HAM_SUPERCEDE
}
else
{
g_fWeaponSpeed[id] = 250.0
SetHamReturnFloat( g_fWeaponSpeed[id] * fSpeed )
return HAM_SUPERCEDE
}
}
return HAM_IGNORED

}


Спасибо за наводку!
 
Сообщения
678
Реакции
580
Предупреждения
8
Помог
9 раз(а)
jesuspunk, лучше проверяйте weaponstate у самого weapon'a
Код:
get_member(weapon, m_Weapon_iWeaponState) & WPNSTATE_SHIELD_DRAWN

и тогда не нужно будет это
Код:
 if(get_member(id,m_bOwnsShield))
{
if(get_member(id,m_bShieldDrawn))
{

13 Мар 2017
можно зарегистрировать все пистолеты
именно это и я имел ввиду. сам щит не ловится никак. Да лучше смотрите исходники ReGameDLL я там беру инфу
13 Мар 2017
Код:
new id = pev(weapon,pev_owner)
лучше так:
Код:
new id = get_member(weapon, m_pPlayer)
 
Сообщения
443
Реакции
319
Помог
13 раз(а)
веапон лист и курвеапон самые нормальные способы работы с щитом(ну типо если реапи нету)
Ловишь отправку юзер мессаг и там делаешь что угодно
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Если я правильно понял задачу, то ещё одним решением будет включать форвард скорости лишь в момент доставание щита. А в остальные моменты держать Think выключенным
 
Сообщения
443
Реакции
319
Помог
13 раз(а)
Что в итоге надо?
 
Сообщения
678
Реакции
580
Предупреждения
8
Помог
9 раз(а)
2-ой вопрос решается само сабой тк rg_round_respawn(id) тут не причем
13 Мар 2017
3-ий вопрос я не очень понял
 
Сообщения
31
Реакции
30
Помог
1 раз(а)
веапон лист и курвеапон самые нормальные способы работы с щитом(ну типо если реапи нету)
Ловишь отправку юзер мессаг и там делаешь что угодно
register_event("CurWeapon", "player_currentWeapon", "be", "1=1") уже пробовал как и Ham_Weapon_SecondaryAttack выполняются до RG_CBasePlayer_ResetMaxSpeed и скорость не ставиться. reapi как раз активно пытаюсь использовать.
Что в итоге надо?
В итоге я уже избавился от client_PostThink по совету Vaqtincha, с помощью Ham_CS_Item_GetMaxSpeed.
Если я правильно понял задачу, то ещё одним решением будет включать форвард скорости лишь в момент доставание щита. А в остальные моменты держать Think выключенным
Не много не понял, форварды можно включить в определенный момент? т.е. в register_event("CurWeapon", сделать ExecuteHam(Ham_CS_Item_GetMaxSpeed,weapon,maxspeed)? Но тогда client_PostThink уже же нужен будет? В какие моменты его держать выключенным?
2-ой вопрос решается само сабой тк rg_round_respawn(id) тут не причем
13 Мар 2017
3-ий вопрос я не очень понял
3-ий вопрос, не работает условие:
Код:
if(g_bAlive[id] && is_entity(ent) && (entity_get_int(ent, EV_INT_flags) & FL_ONGROUND) && get_member(ent,m_WeaponBox_bIsBomb) && !get_member(id,m_bHasC4)))
{
player_giveC4(id)
remove_entity(ent)
return PLUGIN_HANDLED
}

но вот так работает:
Код:
    if(g_bAlive[id] && is_entity(ent) && (entity_get_int(ent, EV_INT_flags) & FL_ONGROUND) && get_member(ent,m_WeaponBox_bIsBomb))
{
if(get_member(id,m_bHasC4))
return PLUGIN_HANDLED
player_giveC4(id)
remove_entity(ent)
return PLUGIN_HANDLED
}

Почему то не учитывается !get_member(id,m_bHasC4) в не рабочем варианте

Vaqtincha еще раз спасибо за усовершенствование кода, хоть и смотрел я в reapi*.inc файлы так и не увидел m_pPlayer
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
jesuspunk, игрок достал щит - включили обработку скорости в Think. Достал не щит - выключили.
 
Сообщения
678
Реакции
580
Предупреждения
8
Помог
9 раз(а)
jesuspunk, как вы ловите
Код:
public c4_pickup(ent, id)

через ham или engine
 
Сообщения
31
Реакции
30
Помог
1 раз(а)
Vaqtincha, register_touch(WEAPONBOX, PLAYER, "c4_pickup") - вроде как это не ham, значит engine...
13 Мар 2017
jesuspunk, игрок достал щит - включили обработку скорости в Think. Достал не щит - выключили.
понял, а что по нагрузке лучше будет, как сделал форварды Ham_CS_Item_GetMaxSpeed или глобальной переменой в Think вкл/выкл обработку скорости со щитом? с форвардами я избавляюсь от Think вообще.
 
Сообщения
678
Реакции
580
Предупреждения
8
Помог
9 раз(а)
jesuspunk, только что проверял и все работает! правда убрал проверку g_bAlive[id]
 
Сообщения
31
Реакции
30
Помог
1 раз(а)
Vaqtincha, да заработало....после твоих слов, вернул обратно условие. Мистика какая то.
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
jesuspunk, результатами поделитесь?
 
Последнее редактирование:
Сообщения
8
Реакции
0
jesuspunk, всё ещё проверяете?
21 Май 2017
А никто больше не смотрел этот плагин? Не пытался его "подружить" с РеХЛДС? Может есть у кого-нибудь ещё варианты, а то jesuspunk пропал куда-то.
 
Сообщения
31
Реакции
30
Помог
1 раз(а)
smirzh, вы напишите в каких местах где и что не дружит я поправлю или еще кто нибудь, а так он и до моих изменений работал под rehlds я только поправил код чтобы баги которые на 6153 билде всплыли и все. Все остальное просто перевод на reapi для само развития.
 

Вложения

Сообщения
1,536
Реакции
2,324
Помог
39 раз(а)
jesuspunk, нет желания оформить релиз с данным модом?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу