Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
defa » 04 авг 2011, 21:01
Функция ловит событие, когда игрок выстрелил из оружия:
- Код: Выделить всё
[pawn]stock bool:get_user_shoot(index)
{
static Params[33][2];
new weaponid = get_pdata_cbase(index, OFFSET_ACTIVEITEM);
new clipammo = get_pdata_int(weaponid, OFFSET_CLIPAMMO, OFFSET_WEAPON);
if((Params[index][0] > clipammo) && (clipammo >= 0) && (Params[index][1] == weaponid))
{
Params[index][0] = clipammo;
return true;
}
else
{
Params[index][0] = clipammo;
Params[index][1] = weaponid;
}
return false;
}
-
defa
-
- Сообщения: 870
- Зарегистрирован: 26 авг 2010, 18:22
- Забанен
- Благодарил (а): 34 раз.
- Поблагодарили: 399 раз.
Ser_UFL » 05 авг 2011, 03:51
Fedcomp, может стоки или инклуды целые под спойлеры загонять в первом посте?
Запомните, всегда по жизни вас будут красить вежливость и спокойствие, а не наезды и дешевые понты
-
Ser_UFL
-
- Сообщения: 975
- Зарегистрирован: 22 авг 2009, 19:30
- Откуда: Hell
- Благодарил (а): 276 раз.
- Поблагодарили: 380 раз.
- Языки программирования: Counter-Strike 1.6:
WebMod-scripts, little Pawn.
-
defa » 07 авг 2011, 23:15
Если entity является игроком:
- Код: Выделить всё
stock bool:is_player(entity)
{
new string[32];
pev(entity, pev_classname, string, sizeof string - 1);
if(strcmp(string, "player") != 0)
return false;
return true;
}
Даёт игроку возможность иметь бесконечные патроны в любых огнестрельных оружиях:
- Код: Выделить всё
- Код: Выделить всё
public give_unlimited_ammo(index)
{
static Params[33][2], weaponid, clipammo;
if(!is_user_alive(index))
return 0;
weaponid = get_pdata_cbase(index, OFFSET_ACTIVEITEM, OFFSET_PLAYER);
clipammo = get_pdata_int(weaponid, OFFSET_CLIPAMMO, OFFSET_WEAPON);
if(Params[index][0] != weaponid)
{
Params[index][0] = weaponid;
Params[index][1] = clipammo;
}
if(Params[index][1] - (Params[index][1] - 1) > clipammo)
set_pdata_int(weaponid, OFFSET_CLIPAMMO, Params[index][1], OFFSET_WEAPON);
set_task(0.1, "give_unlimited_ammo", index);
return 1;
}
-
defa
-
- Сообщения: 870
- Зарегистрирован: 26 авг 2010, 18:22
- Забанен
- Благодарил (а): 34 раз.
- Поблагодарили: 399 раз.
Fedcomp » 08 авг 2011, 01:00
Мне все же кажется выдача бесконечных патронов это работа конкретного плагина. Нужны более общие функции. Вот проверка игрока на энтитю очень даже.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.
"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
-
Fedcomp
-
- Сообщения: 4936
- Зарегистрирован: 28 авг 2009, 20:47
- Благодарил (а): 813 раз.
- Поблагодарили: 1317 раз.
- Языки программирования: =>
pawn / php / python / ruby
javascript / rust
KORD_12.7 » 08 авг 2011, 12:16
Сделал стоки для weaponbox-ов в
HLDM.
Credits: HLSDK
- Код: Выделить всё
new const m_pPlayer = 28
const m_pNext = 29;
const m_iId = 30;
new const m_rgpPlayerItems[MAX_ITEM_TYPES] = {21, 22, 23, 24, 25, 26}const m_rgiszAmmo_slot0 = 28;const m_rgAmmo_slot0 = 60;
const XTRA_OFS_WEAPONBOX = 4
stock WeaponBox_Spawn()
{
new pWeaponBox = create_entity("weaponbox");
if (!pev_valid(pWeaponBox))
return FM_NULLENT;
set_pev(pWeaponBox, pev_movetype, MOVETYPE_TOSS);
set_pev(pWeaponBox, pev_solid, SOLID_TRIGGER);
engfunc(EngFunc_SetSize, pWeaponBox, Float:{0.0, 0.0, 0.0} , Float:{0.0, 0.0, 0.0});
engfunc(EngFunc_SetModel, pWeaponBox, "models/w_weaponbox.mdl");
ExecuteHamB(Ham_Spawn, pWeaponBox)
return pWeaponBox;
}
stock WeaponBox_Kill(const pWeaponBox)
{
new pWeapon, i;
for (i = 0 ; i < MAX_ITEM_TYPES ; i++)
{
pWeapon = get_pdata_cbase(pWeaponBox, m_rgpPlayerItems[i], XTRA_OFS_WEAPONBOX)
while (pev_valid(pWeapon))
{
set_pev(pWeapon, pev_flags, FL_KILLME)
pWeapon = get_pdata_cbase(pWeapon, m_pNext, XTRA_OFS_WEAPONBOX)
}
}
set_pev(pWeaponBox, pev_flags, FL_KILLME);
}
stock WeaponBox_PackWeapon(const pWeaponBox, const pWeapon)
{
if (WeaponBox_HasWeapon(pWeaponBox, pWeapon))
{
return 0; }
new pPlayer = get_pdata_cbase(pWeapon, m_pPlayer, XTRA_OFS_WEAPONBOX);
new iWeaponSlot = ExecuteHamB(Ham_Item_ItemSlot, pWeapon);
new rgpPlayerItem = get_pdata_cbase(pWeaponBox, m_rgpPlayerItems[iWeaponSlot], XTRA_OFS_WEAPONBOX);
if (pev_valid(pPlayer))
{
if (!ExecuteHamB(Ham_RemovePlayerItem, pPlayer, pWeapon))
{
return 0;
}
}
if (pev_valid(rgpPlayerItem))
{
set_pdata_cbase(pWeapon, m_pNext, rgpPlayerItem, XTRA_OFS_WEAPONBOX);
set_pdata_cbase(pWeaponBox, m_rgpPlayerItems[iWeaponSlot], pWeapon, XTRA_OFS_WEAPONBOX);
}
else
{
set_pdata_cbase(pWeaponBox, m_rgpPlayerItems[iWeaponSlot], pWeapon, XTRA_OFS_WEAPONBOX);
set_pdata_cbase(pWeapon, m_pNext, FM_NULLENT, XTRA_OFS_WEAPONBOX);
}
set_pev(pWeapon, pev_spawnflags, pev(pWeapon, pev_spawnflags) | SF_NORESPAWN); set_pev(pWeapon, pev_movetype, MOVETYPE_NONE);
set_pev(pWeapon, pev_solid, SOLID_NOT);
set_pev(pWeapon, pev_effects, EF_NODRAW);
set_pev(pWeapon, pev_modelindex, 0);
set_pev(pWeapon, pev_model, 0);
set_pev(pWeapon, pev_owner, pWeaponBox);
set_pdata_cbase(pWeapon, m_pPlayer, FM_NULLENT, XTRA_OFS_WEAPONBOX);
return 1;
}
stock WeaponBox_GiveAmmo(const pWeaponBox, const iCount, const szName[], const iMax)
{
new i
for (new m_rgiszAmmo, szAmmo[24], i = 0; i < MAX_AMMO_SLOTS && (m_rgiszAmmo = get_pdata_int(pWeaponBox, m_rgiszAmmo_slot0 + i, XTRA_OFS_WEAPONBOX)); i++)
{
global_get(glb_pStringBase, m_rgiszAmmo, szAmmo, charsmax(szAmmo))
if (strcmp(szName, szAmmo) == 0)
{
new m_rgAmmo = get_pdata_int(pWeaponBox, m_rgAmmo_slot0 + i, XTRA_OFS_WEAPONBOX)
new iAdd = min(iCount, iMax - m_rgAmmo)
if (iCount == 0 || iAdd > 0)
{
set_pdata_int(pWeaponBox, m_rgAmmo_slot0 + i, m_rgAmmo + iAdd, XTRA_OFS_WEAPONBOX)
return i;
}
return -1;
}
}
if (i < MAX_AMMO_SLOTS)
{
set_pdata_int(pWeaponBox, m_rgiszAmmo_slot0 + i, engfunc(EngFunc_AllocString, szName), XTRA_OFS_WEAPONBOX)
set_pdata_int(pWeaponBox, m_rgAmmo_slot0 + i, iCount, XTRA_OFS_WEAPONBOX)
return i;
}
return i;
}
stock WeaponBox_HasWeapon(const pWeaponBox, const pCheckItem)
{
new pItem = get_pdata_cbase(pWeaponBox, m_rgpPlayerItems[ExecuteHamB(Ham_Item_ItemSlot, pCheckItem)], XTRA_OFS_WEAPONBOX)
while (pev_valid(pItem))
{
if (get_pdata_int(pItem, m_iId, XTRA_OFS_WEAPONBOX) == get_pdata_int(pCheckItem, m_iId, XTRA_OFS_WEAPONBOX))
{
return 1;
}
pItem = get_pdata_cbase(pItem, m_pNext, XTRA_OFS_WEAPONBOX)
}
return 0;
}
stock bool: WeaponBox_IsEmpty(const pWeaponBox)
{
new i;
for (i = 0 ; i < MAX_ITEM_TYPES ; i++)
{
if (pev_valid(get_pdata_cbase(pWeaponBox, m_rgpPlayerItems[i], XTRA_OFS_WEAPONBOX)))
{
return false;
}
}
for (i = 0 ; i < MAX_AMMO_SLOTS ; i++)
{
if (get_pdata_int(pWeaponBox, m_rgiszAmmo_slot0 + i, XTRA_OFS_WEAPONBOX))
{
return false;
}
}
return true;
}
Последний раз редактировалось
KORD_12.7 12 авг 2011, 15:08, всего редактировалось 1 раз.
_http://aghl.ru/ - Half-Life и Adrenaline Gamer: за пределами возможного
-
KORD_12.7
-
- Сообщения: 298
- Зарегистрирован: 28 сен 2009, 10:14
- Откуда: Владивосток
- Благодарил (а): 142 раз.
- Поблагодарили: 257 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: Half-Life
Opposing Force
Adrenaline Gamer
Counter-Strike
-
defa » 09 авг 2011, 12:40
Функция возвращает количество повторений символа в строке:
- Код: Выделить всё
stock count_char(const string[], const ch)
{
new index, count;
for(index = 0; string[index]; index++)
{
if(string[index] != ch)
continue;
count++;
}
return count;
}
-
defa
-
- Сообщения: 870
- Зарегистрирован: 26 авг 2010, 18:22
- Забанен
- Благодарил (а): 34 раз.
- Поблагодарили: 399 раз.
Fedcomp » 09 авг 2011, 19:03
а для подстроки можешь написать?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.
"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
-
Fedcomp
-
- Сообщения: 4936
- Зарегистрирован: 28 авг 2009, 20:47
- Благодарил (а): 813 раз.
- Поблагодарили: 1317 раз.
- Языки программирования: =>
pawn / php / python / ruby
javascript / rust
defa » 09 авг 2011, 19:58
Так это ж не трудно, просто начинать инициализацию в цикле с нужного нам числа, которое будет указывать на первый елемент строки
:
- Код: Выделить всё
stock count_subchar(const string[], element, const ch)
{
new index, count;
for(index = element; string[index]; index++)
{
if(string[index] != ch)
continue;
count++;
}
return count;
}
-
defa
-
- Сообщения: 870
- Зарегистрирован: 26 авг 2010, 18:22
- Забанен
- Благодарил (а): 34 раз.
- Поблагодарили: 399 раз.
Fedcomp » 09 авг 2011, 20:52
Я имел ввиду искать в строке 'lolwut'
Искать подстроку 'lwu'
И было бы хорошо:
- Функцию для поиска первого совпадения в строке поданой подстроки которая возвращает число начиная с которого идет подстрока (искать в строке 'lolwut' подстроку 'lwut' equal выдает только true/false)
- Функцию для поиска количества совпадений подстроки в строке (искать в строке 'lolwutxdwutnowut' количество 'wut')
- Функция для получения подстроки имея начальное и конечное число, т.е 'lolhammerwut' нам нужно получить строку 'hammer' задав допустим substr(3 (начало), 8 (конец), строку_приемник, длину_строки_приемника)
И вообще будут ли целесообразны эти функции?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.
"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
-
Fedcomp
-
- Сообщения: 4936
- Зарегистрирован: 28 авг 2009, 20:47
- Благодарил (а): 813 раз.
- Поблагодарили: 1317 раз.
- Языки программирования: =>
pawn / php / python / ruby
javascript / rust
noo00oob » 09 авг 2011, 21:04
Fedcomp писал(а):И вообще будут ли целесообразны эти функции?
Для чего? Искать в имень игрока подстроку "ggf", и если такая нашлась давать ему безсмертие?
noo00oob, зачем родился на свет вообще? срать на форумах это понятно.. больше изъеба не найти как бэ? а то, что ты недоношенная скотина, сдерживайся, детка.
-
noo00oob
-
- Сообщения: 1061
- Зарегистрирован: 09 янв 2010, 21:52
- Благодарил (а): 258 раз.
- Поблагодарили: 394 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: Counter-Strike 1.6
Half-Life
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 15