Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
onetwothree » 11 янв 2017, 17:18
здравствуйте! есть плагин knifegames.. так вот, недавно его установил на сервера и включил, там 6 или 7 видов игр. почему-то автоматический активируется игра, при этом ещё криво.. если выбрать пункт 3, выбирается 6 например.. как это исправить?
- Код: Выделить всё
new mxplr
new status[33]
new bool:vibri_event = false;
new inf
new invisibility[33][2];
new chameleon[33][2];
new footsteps[33][2];
new game_on = 0;
new gmsgTeamInfo
enum teams
{
FM_TEAM_UNASSIGNED = 0,
FM_TEAM_T,
FM_TEAM_CT,
FM_TEAM_SPECTATOR
}
new wents[][] =
{
"weapon_shield",
"weaponbox",
"armoury_entity"
}
public plugin_init()
{
register_plugin("KnifeGames", "0.2", "Desert/AcrobaT")
gmsgTeamInfo = get_user_msgid("TeamInfo")
register_concmd("glow", "RandGlow", ADMIN_ACCESS, "All Player Random Glow.")
register_logevent("RoundEnd", 2, "1=Round_End")
register_logevent("randomevent", 2, "1=Round_Start")
RegisterHam(Ham_Spawn, "player", "spawn_post", 1)
RegisterHam(Ham_TakeDamage, "player", "damage")
RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1)
register_clcmd("kgame", "gmenu")
register_clcmd("say /kgame", "gmenu")
register_clcmd("say_team /kgame", "gmenu")
for(new i = 0; i < sizeof(wents); i++)
{
RegisterHam(Ham_Touch, wents[i], "blocktouch")
}
mxplr = get_maxplayers()
}
public PlayerSpawn(id)
{
fm_strip_user_weapons(id)
fm_give_item(id, "weapon_knife")
return PLUGIN_CONTINUE
}
public client_putinserver(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
invisibility[id][0] = 0;
footsteps[id][0] = 0;
chameleon[id][0] = 0;
set_user_rendering(id,kRenderFxNone,255,255,255, kRenderNormal,16);
return PLUGIN_CONTINUE;
}
public client_disconnect(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
invisibility[id][0] = 0;
footsteps[id][0] = 0;
chameleon[id][0] = 0;
return PLUGIN_CONTINUE;
}
public gmenu(id)
{
if (get_user_flags(id) & ADMIN_MENU)
{
if(game_on == 0)
{
new menu = menu_create("\rВыберите игру:\n\wcs-gold.net", "norandomevent")
menu_additem(menu, "\yГладиаторы", "0")
menu_additem(menu, "\yБомбардировка", "1")
menu_additem(menu, "\yНочные разбойники", "5")
menu_additem(menu, "\yZombie", "3")
menu_additem(menu, "\yРежим DM", "4")
menu_additem(menu, "\yСнайперы", "5")
menu_additem(menu, "\yКосмонавты", "6")
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}else{
client_print(0, print_chat, "[Knife игры] Одна игра уже запущена!")
}
}
}
public norandomevent(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
new cmd[3], access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new Choise = str_to_num(cmd)
switch(Choise)
{
case 0:
{
vibri_event = true
game_on = 1
hp(0)
}
case 1:
{
vibri_event = true
game_on = 1
hegrenade(0)
}
case 2:
{
vibri_event = true
game_on = 1
zombie()
}
case 3:
{
vibri_event = true
game_on = 1
nodead(0)
}
case 4:
{
vibri_event = true
game_on = 1
night(0)
}
case 5:
{
vibri_event = true
game_on = 1
scouts(0)
}
case 6:
{
vibri_event = true
game_on = 1
gravity(0)
}
}
}
public randomevent(id)
{
switch(random_num(0, 15))
{
case 0:
{
vibri_event = true
game_on = 1
hp(0)
}
case 1:
{
vibri_event = true
game_on = 1
hegrenade(0)
}
case 2:
{
vibri_event = true
game_on = 1
zombie()
}
case 3:
{
vibri_event = true
game_on = 1
nodead(0)
}
case 4:
{
vibri_event = true
game_on = 1
night(0)
}
case 5:
{
vibri_event = true
game_on = 1
scouts(0)
}
case 6:
{
vibri_event = true
game_on = 1
gravity(0)
}
}
}
public respawn(id) {
set_user_godmode(id, 0);
set_user_rendering(id,kRenderFxNone,255,255,255, kRenderNormal,16);
return PLUGIN_CONTINUE;
}
public spawn_post(id)
{
if(!is_user_alive(id))
return HAM_IGNORED
if(is_zombie(id))
{
set_pev(id, pev_health, 2000.0)
fm_strip_user_weapons(id)
fm_give_item(id, "weapon_knife")
}
return HAM_IGNORED
}
public damage(id, inflictor, ida, Float:dmg, dmgbits)
{
if(!is_user_alive(ida) || !is_zombie(ida) || is_zombie(id) || inf)
return HAM_IGNORED
zombieme(id, ida)
check_last()
return HAM_IGNORED
}
public check_last()
{
new num
for(new id = 1; id <= mxplr; id++)
{
if(!is_user_alive(id) || is_zombie(id))
continue
num++
}
if(num <= 1)
{
inf = 1
set_hudmessage(255, 0, 0, 0.09, -1.0, 0, 6.0, 12.0)
show_hudmessage(0, "Остался последний выживший!")
}
}
public blocktouch(ent, id)
{
if(!pev_valid(ent) || !is_user_alive(id) || !is_zombie(id))
return HAM_IGNORED
return HAM_SUPERCEDE
}
public zombie()
{
new id, num
num = get_playersnum()
id = random_num(1, num)
while(!is_user_alive(id))
{
id = random_num(1, num)
}
if(fm_get_user_team(id) != FM_TEAM_T)
{
need_teamchange(id)
}
new name[32]
get_user_name(id, name, 31)
zombieme(id, 0)
client_print(0, print_chat, "[Knife игры] Играем в зомби! Зомби в облике террористов.!")
set_dhudmessage(255, 0, 0, 0.09, -1.0, 0, 6.0, 12.0)
show_dhudmessage(0, "%s Первый зомби с 2000 хп! кого ударит тот тоже будет зомби!", name)
new i
for(i = 1; i <= mxplr; i++)
{
if(!is_user_alive(i) || i == id)
continue
if(fm_get_user_team(i) != FM_TEAM_CT)
{
fm_set_user_team(i, FM_TEAM_CT)
team_msg(i, "CT")
need_teamchange(i)
}
fm_strip_user_weapons(i)
fm_give_item(i, "weapon_deagle")
fm_give_item(i, "weapon_knife")
set_pdata_int(i, OFFSET_DEAGLE_AMMO, 200)
}
}
public zombieme(id, killer)
{
fm_set_user_team(id, FM_TEAM_T)
make_zombie(id)
ExecuteHamB(Ham_CS_RoundRespawn, id)
set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal,30)
if(is_user_alive(killer))
{
make_deathmsg(killer, id, 0, "infection")
}
}
public hp(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
if((is_user_alive(player)))
{
get_user_team(player,team,32);
strip_user_weapons(player);
give_item(player, "weapon_knife");
set_task(0.1, "RandGlow"); set_user_health(player, 1000);
set_cvar_num("dr_shop", 0);
client_print(0, print_chat, "[Knife игры] Играем в гладиаторов!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в гладиаторов!")
}
}
}
else
{
client_print(0, print_chat, "[Knife игры] Эвент кончился")
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public scouts(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
if((is_user_alive(player)))
{
get_user_team(player,team,32);
strip_user_weapons(player);
give_item(player, "weapon_scout");
set_user_health(player, 100);
set_cvar_num("dr_shop", 0);
set_task(0.1, "RandGlow"); client_print(0, print_chat,"[Knife игры] Играем в снайперов!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в снайперов!")
}
}
}
else
{
client_print(0, print_chat, "[Knife игры] Эвент кончился")
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public hegrenade(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
if((is_user_alive(player)))
{
get_user_team(player,team,32);
strip_user_weapons(player);
set_task(0.1, "RandGlow"); give_item(player, "weapon_hegrenade");
cs_set_user_bpammo(player, CSW_HEGRENADE, 100)
set_user_health(player, 100);
set_cvar_num("dr_shop", 0);
client_print(0, print_chat, "[Knife игры] Играем в бомбардировку!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в бомбардировку!")
}
}
}
else
{
client_print(0, print_chat, "[Knife игры] Эвент кончился")
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public night(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
if((is_user_alive(player)))
{
get_user_team(player,team,32);
strip_user_weapons(player);
give_item(player, "weapon_knife");
set_lights("a");
set_cvar_num("dr_shop", 0);
client_print(0, print_chat, "[Knife игры] Играем в ночных разбойников! Правила можно нарушать!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в ночных разбойников!")
}
}
}
}
public gravity(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
if((is_user_alive(player)))
{
get_user_team(player,team,32);
strip_user_weapons(player);
give_item(player, "weapon_knife");
set_cvar_num("sv_gravity", 0);
set_cvar_num("dr_shop", 0);
client_print(0, print_chat, "[Knife игры] Играем в космонавтов! Правила можно нарушать!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в космонавтов!")
}
}
}
}
public nodead(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
get_user_team(player,team,32);
set_task(1.0, "allrespawn");
set_task(2.0, "allrespawn");
set_task(3.0, "allrespawn");
set_task(4.0, "allrespawn");
set_task(5.0, "allrespawn");
set_task(6.0, "allrespawn");
set_task(7.0, "allrespawn");
set_task(8.0, "allrespawn");
set_task(9.0, "allrespawn");
set_task(10.0, "allrespawn");
set_task(11.0, "allrespawn");
set_task(12.0, "allrespawn");
set_task(13.0, "allrespawn");
set_task(14.0, "allrespawn");
set_task(15.0, "allrespawn");
set_task(16.0, "allrespawn");
set_task(17.0, "allrespawn");
set_task(18.0, "allrespawn");
set_task(19.0, "allrespawn");
set_task(20.0, "allrespawn");
set_task(21.0, "allrespawn");
set_task(22.0, "allrespawn");
set_task(23.0, "allrespawn");
set_task(24.0, "allrespawn");
set_task(25.0, "allrespawn");
set_task(26.0, "allrespawn");
set_task(27.0, "allrespawn");
set_task(28.0, "allrespawn");
set_task(29.0, "allrespawn");
set_task(30.0, "allrespawn");
set_task(31.0, "allrespawn");
set_task(32.0, "allrespawn");
set_task(33.0, "allrespawn");
set_task(34.0, "allrespawn");
set_task(35.0, "allrespawn");
set_task(36.0, "allrespawn");
set_task(37.0, "allrespawn");
set_task(38.0, "allrespawn");
set_task(39.0, "allrespawn");
set_task(40.0, "allrespawn");
set_task(41.0, "allrespawn");
set_task(42.0, "allrespawn");
set_task(43.0, "allrespawn");
set_task(44.0, "allrespawn");
set_task(45.0, "allrespawn");
set_task(47.0, "allrespawn");
set_task(50.0, "allrespawn");
set_task(53.0, "allrespawn");
set_task(55.0, "allrespawn");
set_task(57.0, "allrespawn");
set_task(59.0, "allrespawn");
set_task(60.0, "allkill");
set_cvar_num("dr_shop", 0);
client_print(0, print_chat, "[Knife игры] Играем в бессмертных! Правила можно нарушать!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в бессмертных! 60 секунд вы будете воскрешатся без остановки!")
}
}
}
public allrespawn(id)
{
for(new i = 1; i <= MAXPLAYERS; i++)
{
if(is_user_alive(i) || !is_user_connected(i))
continue;
ExecuteHamB(Ham_CS_RoundRespawn, i)
}
return;
}
public allkill(id)
{
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Бессмертность кончилась!")
return PLUGIN_HANDLED
}
public RoundEnd() {
new maxplayers = get_maxplayers()+1;
for(new id = 1; id < maxplayers; id++)
{
if(is_zombie(id))
{
status[id] &= ~(1<<0)
}
if(team_change(id))
{
fm_set_user_team(id, FM_TEAM_CT)
status[id] &= ~(1<<1)
}
}
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
get_user_team(player,team,32);
set_user_rendering(player,kRenderFxNone,255,255,255, kRenderNormal,16);
}
game_on = 0;
vibri_event = false;
set_lights("#OFF");
set_cvar_num("amx_set_ffa", 0);
set_cvar_num("mp_friendlyfire", 0);
set_cvar_num("sv_gravity", 800);
set_cvar_num("dr_shop", 1);
remove_task();
}
inf = 0
}
public RandGlow() {
new Red = random(256);
new Green = random(256);
new Blue = random(256);
new players[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
set_user_rendering(player, kRenderFxGlowShell, Red, Green, Blue, kRenderNormal,30)
}
}
stock fm_strip_user_weapons(index) {
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"))
if (!pev_valid(ent))
return 0
dllfunc(DLLFunc_Spawn, ent)
dllfunc(DLLFunc_Use, ent, index)
engfunc(EngFunc_RemoveEntity, ent)
return 1
}
stock fm_set_user_team(id, {teams,_}:iTeam)
{
if( iTeam > FM_TEAM_SPECTATOR )
return
set_pdata_int(id, OFFSET_TEAM, _:iTeam)
}
public team_msg(id, const team[])
{
emessage_begin(MSG_BROADCAST, gmsgTeamInfo)
ewrite_byte(id)
ewrite_string(team)
emessage_end()
}
stock teams:fm_get_user_team(id)
{
return teams:get_pdata_int(id, OFFSET_TEAM)
}
stock fm_give_item(index, const item[]) {
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
return 0;
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent))
return 0;
new Float:origin[3];
pev(index, pev_origin, origin);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, ent);
new save = pev(ent, pev_solid);
dllfunc(DLLFunc_Touch, ent, index);
if (pev(ent, pev_solid) != save)
return ent;
engfunc(EngFunc_RemoveEntity, ent);
return -1;
}
-
onetwothree
-
- Сообщения: 16
- Зарегистрирован: 04 янв 2017, 19:23
- Благодарил (а): 10 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#
NEoMASTERR » 11 янв 2017, 18:09
Чуточку подправить в этом ужасном плагине это полностью переписать его
Добавлено спустя 1 минуту 25 секунд:- Код: Выделить всё
public gmenu(id)
{
if (get_user_flags(id) & ADMIN_MENU)
{
if(game_on == 0)
{
new menu = menu_create("\rВыберите игру:\n\wcs-gold.net", "norandomevent")
menu_additem(menu, "\yГладиаторы")
menu_additem(menu, "\yБомбардировка")
menu_additem(menu, "\yНочные разбойники")
menu_additem(menu, "\yZombie")
menu_additem(menu, "\yРежим DM")
menu_additem(menu, "\yСнайперы")
menu_additem(menu, "\yКосмонавты")
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}
else
client_print(0, print_chat, "[Knife игры] Одна игра уже запущена!")
}
return PLUGIN_HANDLED
}
public norandomevent(id, menu, item)
{
if( item == ITEM_EXIT)
{
menu_destroy(menu)
return PLUGIN_CONTINUE;
}
switch(item)
{
case 0:
{
vibri_event = true
game_on = 1
hp(0)
}
case 1:
{
vibri_event = true
game_on = 1
hegrenade(0)
}
case 2:
{
vibri_event = true
game_on = 1
night(0)
}
case 3:
{
vibri_event = true
game_on = 1
zombie()
}
case 4:
{
vibri_event = true
game_on = 1
nodead(0)
}
case 5:
{
vibri_event = true
game_on = 1
scouts(0)
}
case 6:
{
vibri_event = true
game_on = 1
gravity(0)
}
}
menu_destroy(menu)
return PLUGIN_CONTINUE;
}
Добавлено спустя 1 минуту 33 секунды:Чтобы убрать автоматический запуск игр надо удалить строку register_logevent("randomevent", 2, "1=Round_Start") с plugin_init и функцию randomevent()
почему то randomevent(id), но не важно
Добавлено спустя 10 минут 14 секунд:- Код: Выделить всё
public nodead(first) {
if(vibri_event == true)
{
new players[32], team[32], num, player;
get_players(players, num, "ah")
for(new i = 0; i < num; i++)
{
player = players[i];
get_user_team(player,team,32);
set_task(1.0, "allrespawn");
set_task(2.0, "allrespawn");
set_task(3.0, "allrespawn");
set_task(4.0, "allrespawn");
set_task(5.0, "allrespawn");
set_task(6.0, "allrespawn");
set_task(7.0, "allrespawn");
set_task(8.0, "allrespawn");
set_task(9.0, "allrespawn");
set_task(10.0, "allrespawn");
set_task(11.0, "allrespawn");
set_task(12.0, "allrespawn");
set_task(13.0, "allrespawn");
set_task(14.0, "allrespawn");
set_task(15.0, "allrespawn");
set_task(16.0, "allrespawn");
set_task(17.0, "allrespawn");
set_task(18.0, "allrespawn");
set_task(19.0, "allrespawn");
set_task(20.0, "allrespawn");
set_task(21.0, "allrespawn");
set_task(22.0, "allrespawn");
set_task(23.0, "allrespawn");
set_task(24.0, "allrespawn");
set_task(25.0, "allrespawn");
set_task(26.0, "allrespawn");
set_task(27.0, "allrespawn");
set_task(28.0, "allrespawn");
set_task(29.0, "allrespawn");
set_task(30.0, "allrespawn");
set_task(31.0, "allrespawn");
set_task(32.0, "allrespawn");
set_task(33.0, "allrespawn");
set_task(34.0, "allrespawn");
set_task(35.0, "allrespawn");
set_task(36.0, "allrespawn");
set_task(37.0, "allrespawn");
set_task(38.0, "allrespawn");
set_task(39.0, "allrespawn");
set_task(40.0, "allrespawn");
set_task(41.0, "allrespawn");
set_task(42.0, "allrespawn");
set_task(43.0, "allrespawn");
set_task(44.0, "allrespawn");
set_task(45.0, "allrespawn");
set_task(47.0, "allrespawn");
set_task(50.0, "allrespawn");
set_task(53.0, "allrespawn");
set_task(55.0, "allrespawn");
set_task(57.0, "allrespawn");
set_task(59.0, "allrespawn");
set_task(60.0, "allkill");
set_cvar_num("dr_shop", 0);
client_print(0, print_chat, "[Knife игры] Играем в бессмертных! Правила можно нарушать!")
set_dhudmessage(255, 0, 0, -1.0, 0.19, 0, 0.0, 10.0, 0.1, 0.2)
show_dhudmessage(0, "Играем в бессмертных! 60 секунд вы будете воскрешатся без остановки!")
}
}
}
-
NEoMASTERR
-
- Сообщения: 832
- Зарегистрирован: 05 янв 2015, 16:38
- Благодарил (а): 43 раз.
- Поблагодарили: 188 раз.
- Опыт программирования: Около года
- Языки программирования: Counter-Strike 1.6
-
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 12