AMD_Ryzen
Участник
- Сообщения
- 44
- Реакции
- 15
- Ошибка
// Compilation aborted. // 4 Errors.
- AMX Mod X
Amx Mod X version 1.9.0.5294
- Билд сервера
Protocol version 48
Exe version 1.6.3.7/Stdio (cstrike)
ReHLDS version: 3.14.0.857-dev
Build date: 19:53:00 Mar 27 2025 (4002)
- ReGameDLL
ReGameDLL version: 5.28.0.756-dev
Build date: 19:20:12 Mar 27 2025
- Metamod версия
Metamod-r v1.3.0.149, API (5:13)
Metamod-r build: 11:31:13 Apr 23 2024
- Metamod плагины
SafeNameAndChat RUN - safenameandchat.dll v1.1 ini ANY ANY
Reunion RUN - reunion_mm.dll v0.1.0.92c ini Start Never
Rechecker RUN - rechecker_mm.dll v2.5 ini Chlvl ANY
ReAuthCheck RUN - reauthcheck_mm.dll v0.1.6 ini Start Never
VoiceTranscoder RUN - voicetranscoder.dll v2017RC5 ini ANY ANY
AMX Mod X RUN - amxmodx_mm.dll v1.9.0.5294 ini Start ANY
Print Center Fix RUN - printcenterfix_mm.dll v2.0.1 ini ANY ANY
YaPB RUN - yapb.dll v4.5.1170 ini Chlvl ANY
ReSemiclip RUN - resemiclip_mm.dll v2.4.3 ini Chlvl ANY
HitBox Fix RUN - hitbox_fix_mm.dll v1.1.5 ini Start ANY
Hide Cvars RUN - hidecvars_amxx.dll v1.0 pl6 ANY ANY
FakeMeta RUN - fakemeta_amxx.dll v1.9.0.5294 pl6 ANY ANY
whois RUN - whois_amxx.dll v0.2.270 pl6 ANY ANY
Ham Sandwich RUN - hamsandwich_amxx.dll v1.9.0.5294 pl6 ANY ANY
Fun RUN - fun_amxx.dll v1.9.0.5294 pl6 ANY ANY
CStrike RUN - cstrike_amxx.dll v1.9.0.5294 pl6 ANY ANY
Engine RUN - engine_amxx.dll v1.9.0.5294 pl6 ANY ANY
- Список плагинов
AMXX BanCfg 0.95 Safety1st amx_bancfg.amxx running
SubnetBan 2.2 Lev subnetban.amxx running
Admin Base 1.9.0.5294 AMXX Dev Team admin.amxx running
Admin Commands 1.9.0.5294 AMXX Dev Team admincmd.amxx running
Menus Front-End 1.9.0.5294 AMXX Dev Team menufront.amxx running
Commands Menu 1.9.0.5294 AMXX Dev Team cmdmenu.amxx running
Players Menu 1.9.0.5294 AMXX Dev Team plmenu.amxx running
Maps Menu 1.9.0.5294 AMXX Dev Team mapsmenu.amxx running
Plugin Menu 1.9.0.5294 AMXX Dev Team pluginmenu.amxx running
Anti Flood 1.9.0.5294 AMXX Dev Team antiflood.amxx running
Admin Votes 1.9.0.5294 AMXX Dev Team adminvote.amxx running
NextMap 1.9.0.5294 AMXX Dev Team nextmap.amxx running
Nextmap Chooser 1.9.0.5294 AMXX Dev Team mapchooser.amxx running
TimeLeft 1.9.0.5294 AMXX Dev Team timeleft.amxx running
Pause Plugins 1.9.0.5294 AMXX Dev Team pausecfg.amxx running
Stats Configuration 1.9.0.5294 AMXX Dev Team statscfg.amxx running
Models Replacement 0.0.2 ConnorMcLeod | V models_replacem running
[ZP] Can Auto Save Amm 0.1.0 ZombArena.Ru zp_save.amxx running
[ZP]knife Menu 2.2 Mr.H zp_addon_knife. running
[ZP] Countdown 1.0 Lacosta zp_countdown.am running
[ZP] Addon: Auto Healt 1.1 Dias ZP_Addon_Auto_H running
[ZP] DHUD Informer 0.0.0.1 Andrei zp_score.amxx running
Block grande info 1.0 neygomon BlockGrenadeInf running
[ZP] Buy Health New 2.0 FINAL xrekuy zp_extra_health running
[ZP] Extra: Anti-Infec 1.0 MeRcyLeZZ zp_extra_human_ running
[ZP] Kill Rewards 1.0 Doomsday zp_kill_reward. running
[ ZP ] Nemesis skill Shurik07 0.1 zp_nemskill.amx running
[ZP]: Zombie Health 1.0 Yakess ZP_Zombie_Healt running
[ZP] LaserMine 2.8.2 SandStriker / Sh zp_lasermine_28 debug
WinTeam Sprite 0.0.8 Some Scripter WinTeam_Sprite. running
[ZP] Addon : No Engine 1.1.0 schmurgel1983 OT6POC.amxx running
[ZP] Survivor HP 1.0 ASSOM zp_addons_survi debug
[ZP] ZP++ Ice Cube 1.0 Dare(Gyiove) zp50_ice_cube.a running
Hide Status Icons on H 0.0 Leo_[BH] hide_hud_status running
The Smartest 1.0 BaHeK The_Smartest.am running
[DF] Plague: Emotions 1.0 DARKFEAL DF_emotions.amx running
[ZP] Addon: Death Spri 1.4 eXcalibur.007 zp_addon_death_ running
[ZP] Core/Engine ZP Dev Team zp50_core.amxx running
[AMXX] Settings API 1.0 MeRcyLeZZ amx_settings_ap running
[CS] Player Models API 1.2 WiLS cs_player_model running
[CS] Teams API 1.2 WiLS cs_teams_api.am running
[CS] MaxSpeed API 1.0 WiLS cs_maxspeed_api running
[CS] Weapon Models API 1.1 WiLS cs_weap_models_ running
[CS] Weapons Restrict 0.4 WiLS cs_weap_restric running
[CS] Ham Hooks for Bot 1.0 WiLS cs_ham_bots_api running
[ZP] Class: Zombie ZP Dev Team zp50_class_zomb running
[ZP] Class: Human ZP Dev Team zp50_class_huma running
[ZP] Class: Nemesis ZP Dev Team zp50_class_neme running
[ZP] Class: Survivor Leo_[BH] & ZP De zp50_class_surv running
[CSO:Ghost Zombie] 1.4 HoRRoR, Fry!,tER cso_zclass_ghos running
[CSO:Shaman Zombie] 0.1 meTaLiCroSS cso_shaman_v1.a running
[ZP] Class: Big 1.0 :) / Slimes zp_class_heavy. debug
[ZP] Class: Human: Cla ZP Dev Team zp50_class_huma running
[ZP] Class: Human: Rap ZP Dev Team zp50_class_huma running
[ZP] Human Armor ZP Dev Team zp50_human_armo running
[ZP] Game Modes Manage ZP Dev Team zp50_gamemodes. running
[ZP] Game Mode: Infect ZP Dev Team zp50_gamemode_i paused
[ZP] Game Mode: Multip ZP Dev Team zp50_gamemode_m paused
[ZP] Game Mode: Swarm ZP Dev Team zp50_gamemode_s running
[ZP] Game Mode: Nemesi ZP Dev Team zp50_gamemode_n paused
[ZP] Game Mode: Surviv ZP Dev Team zp50_gamemode_s paused
[ZP] Game Mode: Plague ZP Dev Team zp50_gamemode_p paused
[ZP] Items Manager ZP Dev Team zp50_items.amxx running
[ZP] Items Manager: Am ZP Dev Team zp50_items_ammo running
[ZP] Item: Weapons ZP Dev Team zp50_item_weapo running
[ZP] Item: Antidote ZP Dev Team zp50_item_antid running
[ZP] Item: Zombie Madn ZP Dev Team zp50_item_zombi running
[ZP] Admin Commands ZP Dev Team zp50_admin_comm running
[ZP] Admin Menus ZP Dev Team zp50_admin_menu running
[ZP] Admin Models ZP Dev Team zp50_admin_mode running
[ZP] Custom Buy Menus ZP Dev Team zp50_buy_menus. running
[ZP] Buyzones ZP Dev Team zp50_buy_zones. running
[ZP] Rewards: Ammo Pac ZP Dev Team zp50_rewards_am running
[ZP] Rewards: Frags & Leo_[BH] & ZP De zp50_rewards_fr running
[ZP] Zombie Features ZP Dev Team zp50_zombie_fea running
[ZP] Zombie Sounds ZP Dev Team zp50_zombie_sou running
[ZP] Zombie Damage ZP Dev Team zp50_zombie_dam running
[ZP] Human Unlimited A ZP Dev Team zp50_human_ammo running
[ZP] Flashlight ZP Dev Team zp50_flashlight running
[ZP] Nightvision Leo_[BH] & ZP De zp50_nightvisio running
[ZP] Leap/Longjump ZP Dev Team zp50_leap.amxx running
[ZP] Pain Shock Free ZP Dev Team zp50_painshockf running
[ZP] Knockback ZP Dev Team zp50_knockback. running
[ZP] Weapon Drop/Strip ZP Dev Team zp50_weapon_dro running
[ZP] Effects: Infect ZP Dev Team zp50_effects_in running
[ZP] Effects: Cure ZP Dev Team zp50_effects_cu running
[ZP] Effects: Lighting ZP Dev Team zp50_effects_li running
[ZP] Ambience Effects ZP Dev Team zp50_ambience_e running
[ZP] Ambience Sonds ZP Dev Team zp50_ambience_s running
[ZP] Main Menu ZP Dev Team zp50_main_menu. running
[ZP] Objective Remover ZP Dev Team zp50_objective_ running
[ZP] Gameplay Fixes ZP Dev Team zp50_gameplay_f running
[ZP] Team Scoring ZP Dev Team zp50_team_scori running
[ZP] HUD Information ZP Dev Team zp50_hud_info.a running
[ZP] Server Browser In ZP Dev Team zp50_serverbrow running
[ZP] Ammo Packs ZP Dev Team zp50_ammopacks. running
[ZP] Grenade: Fire Leo_[BH] & ZP De zp50_grenade_fi running
[ZP] Grenade: Frost Leo_[BH] & ZP De zp50_grenade_fr running
[ZP] Grenade: Flare Leo_[BH] & ZP De zp50_grenade_fl running
[ZP] ZP 4.3 Subplugin ZP Dev Team zp50_zp43_compa running
- Исходный код плагина
- C-подобный:
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <zombieplague> #include <xs> #define PLUGIN "DJB Zombie Class Banchee" #define VERSION "1.0" #define AUTHOR "Csoldjb" new const zclass_name[] = "BedMa" new const zclass_info[] = "\y[ MbIIIIu \y]" new const zclass_model[] = "Banchee" new const zclass_clawmodel[] = "v_hands_Banchee.mdl" new const g_vgrenade[] = "models/v_zombibomb_class.mdl" const zclass_health = 1800 const zclass_speed = 190 const Float:zclass_gravity = 1.0 const Float:zclass_knockback = 1.0 new const SOUND_FIRE[] = "zombie_plague/zombi_banshee_pulling_fire.wav" new const SOUND_BAT_HIT[] = "zombie_plague/zombi_banshee_laugh.wav" new const SOUND_BAT_MISS[] = "zombie_plague/zombi_banshee_pulling_fail.wav" new const MODEL_BAT[] = "models/zombie_plague/bat_witch.mdl" new const BAT_CLASSNAME[] = "banchee_bat" new spr_skull const Float:banchee_skull_bat_speed = 600.0 const Float:banchee_skull_bat_flytime = 3.0 const Float:banchee_skull_bat_catch_time = 3.0 const Float:banchee_skull_bat_catch_speed = 100.0 const Float:bat_timewait = 14.0 new g_stop[33] new g_bat_time[33] new g_bat_stat[33] new g_bat_enemy[33] new Float:g_temp_speed[33] new idclass_banchee new g_maxplayers new g_roundend new g_msgSayText enum (+= 100) { TASK_BOT_USE_SKILL = 2367, TASK_REMOVE_STAT } #define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL) #define ID_TASK_REMOVE_STAT (taskid - TASK_REMOVE_STAT) public plugin_precache() { precache_sound(SOUND_FIRE) precache_sound(SOUND_BAT_HIT) precache_sound(SOUND_BAT_MISS) precache_model(g_vgrenade) precache_model(MODEL_BAT) spr_skull = precache_model("sprites/ef_bat.spr") idclass_banchee = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("CurWeapon","handle_gun","be","1=1") register_event("HLTV", "EventHLTV", "a", "1=0", "2=0") register_event("DeathMsg", "EventDeath", "a") register_logevent("logevent_round_end", 2, "1=Round_End") register_clcmd("drop", "cmd_bat") register_forward(FM_PlayerPreThink,"fw_PlayerPreThink") RegisterHam(Ham_Touch,"info_target","EntityTouchPost",1) RegisterHam(Ham_Think,"info_target","EntityThink") g_maxplayers = get_maxplayers() g_msgSayText = get_user_msgid("SayText") } public client_putinserver(id) { reset_value_player(id) } public client_disconnected(id) { reset_value_player(id) } public EventHLTV() { g_roundend = 0 for(new id = 1; id <= g_maxplayers; id++) { if (!is_user_connected(id)) continue; reset_value_player(id) } } public logevent_round_end() { g_roundend = 1 } public EventDeath() { new id = read_data(2) reset_value_player(id) } public zp_user_infected_post(id) { reset_value_player(id) if(zp_get_user_nemesis(id)) return; if(zp_get_user_zombie_class(id) == idclass_banchee) { if(is_user_bot(id)) { set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL) return } zp_colored_print(id, "^x04[ZP]^x01 Ваш навык^x04 Летучие Мыши^x01. Восстановление^x04 %.1f ^x01секунд.", bat_timewait) } } public zp_user_humanized_post(id) { reset_value_player(id) } public cmd_bat(id) { if(g_roundend) return PLUGIN_CONTINUE if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return PLUGIN_CONTINUE if(zp_get_user_zombie_class(id) == idclass_banchee && !g_bat_time[id]) { g_bat_time[id] = 1 set_task(bat_timewait,"clear_stat",id+TASK_REMOVE_STAT) new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target")) if(!pev_valid(ent)) return PLUGIN_HANDLED new Float:vecAngle[3],Float:vecOrigin[3],Float:vecVelocity[3],Float:vecForward[3] fm_get_user_startpos(id,5.0,2.0,-1.0,vecOrigin) pev(id,pev_angles,vecAngle) engfunc(EngFunc_MakeVectors,vecAngle) global_get(glb_v_forward,vecForward) velocity_by_aim(id,floatround(banchee_skull_bat_speed),vecVelocity) set_pev(ent,pev_origin,vecOrigin) set_pev(ent,pev_angles,vecAngle) set_pev(ent,pev_classname,BAT_CLASSNAME) set_pev(ent,pev_movetype,MOVETYPE_FLY) set_pev(ent,pev_solid,SOLID_BBOX) engfunc(EngFunc_SetSize,ent,{-20.0,-15.0,-8.0},{20.0,15.0,8.0}) engfunc(EngFunc_SetModel,ent,MODEL_BAT) set_pev(ent,pev_animtime,get_gametime()) set_pev(ent,pev_framerate,1.0) set_pev(ent,pev_owner,id) set_pev(ent,pev_velocity,vecVelocity) set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_flytime) emit_sound(ent, CHAN_WEAPON, SOUND_FIRE, 1.0, ATTN_NORM, 0, PITCH_NORM) g_stop[id] = ent PlayWeaponAnimation(id, 2) pev(id, pev_maxspeed, g_temp_speed[id]) set_pev(id,pev_maxspeed,0.1) return PLUGIN_HANDLED } return PLUGIN_CONTINUE } public fw_PlayerPreThink(id) { if(!is_user_alive(id)) return FMRES_IGNORED if(g_bat_stat[id]) { new owner = g_bat_enemy[id], Float:ownerorigin[3] pev(owner,pev_origin,ownerorigin) static Float:vec[3] aim_at_origin(id,ownerorigin,vec) engfunc(EngFunc_MakeVectors, vec) global_get(glb_v_forward, vec) vec[0] *= banchee_skull_bat_catch_speed vec[1] *= banchee_skull_bat_catch_speed vec[2] = 0.0 set_pev(id,pev_velocity,vec) } return FMRES_IGNORED } public EntityThink(ent) { if(!pev_valid(ent)) return HAM_IGNORED new classname[32] pev(ent,pev_classname,classname,31) if(equal(classname,BAT_CLASSNAME)) { static Float:origin[3]; pev(ent,pev_origin,origin); message_begin(MSG_BROADCAST,SVC_TEMPENTITY); write_byte(TE_EXPLOSION); // TE_EXPLOSION write_coord(floatround(origin[0])); // origin x write_coord(floatround(origin[1])); // origin y write_coord(floatround(origin[2])); // origin z write_short(spr_skull); // sprites write_byte(40); // scale in 0.1's write_byte(30); // framerate write_byte(14); // flags message_end(); // message end emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM) new owner = pev(ent, pev_owner) g_stop[owner] = 0 set_pev(owner,pev_maxspeed,g_temp_speed[owner]) engfunc(EngFunc_RemoveEntity,ent) } return HAM_IGNORED } public EntityTouchPost(ent,ptd) { if(!pev_valid(ent)) return HAM_IGNORED new classname[32] pev(ent,pev_classname,classname,31) if(equal(classname,BAT_CLASSNAME)) { if(!pev_valid(ptd)) { static Float:origin[3]; pev(ent,pev_origin,origin); message_begin(MSG_BROADCAST,SVC_TEMPENTITY); write_byte(TE_EXPLOSION); // TE_EXPLOSION write_coord(floatround(origin[0])); // origin x write_coord(floatround(origin[1])); // origin y write_coord(floatround(origin[2])); // origin z write_short(spr_skull); // sprites write_byte(40); // scale in 0.1's write_byte(30); // framerate write_byte(14); // flags message_end(); // message end emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM) new owner = pev(ent, pev_owner) g_stop[owner] = 0 set_pev(owner,pev_maxspeed,g_temp_speed[owner]) engfunc(EngFunc_RemoveEntity,ent) return HAM_IGNORED } new owner = pev(ent,pev_owner) if(0 < ptd && ptd <= g_maxplayers && is_user_alive(ptd) && ptd != owner) { g_bat_enemy[ptd] = owner set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_catch_time) set_task(banchee_skull_bat_catch_time,"clear_stat2",ptd+TASK_REMOVE_STAT) set_pev(ent,pev_movetype,MOVETYPE_FOLLOW) set_pev(ent,pev_aiment,ptd) emit_sound(owner, CHAN_VOICE, SOUND_BAT_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM) g_bat_stat[ptd] = 1 } } return HAM_IGNORED } public clear_stat(taskid) { new id = ID_TASK_REMOVE_STAT g_bat_stat[id] = 0 g_bat_time[id] = 0 zp_colored_print(id, "^x04[ZP]^x01 Ваш навык^x04 Летучие Мыши^x01 восстановлен.") } public clear_stat2(idx) { new id = idx-TASK_REMOVE_STAT g_bat_enemy[id] = 0 g_bat_stat[id] = 0 } public bot_use_skill(taskid) { new id = ID_BOT_USE_SKILL if (!is_user_alive(id)) return; cmd_bat(id) set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL) } fm_get_user_startpos(id,Float:forw,Float:right,Float:up,Float:vStart[]) { new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_v_angle, vAngle) engfunc(EngFunc_MakeVectors, vAngle) global_get(glb_v_forward, vForward) global_get(glb_v_right, vRight) global_get(glb_v_up, vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } aim_at_origin(id, Float:target[3], Float:angles[3]) { static Float:vec[3] pev(id,pev_origin,vec) vec[0] = target[0] - vec[0] vec[1] = target[1] - vec[1] vec[2] = target[2] - vec[2] engfunc(EngFunc_VecToAngles,vec,angles) angles[0] *= -1.0 angles[2] = 0.0 } PlayWeaponAnimation(id, animation) { set_pev(id, pev_weaponanim, animation) message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(animation) write_byte(pev(id, pev_body)) message_end() } reset_value_player(id) { g_stop[id] = 0 g_bat_time[id] = 0 g_bat_stat[id] = 0 g_bat_enemy[id] = 0 remove_task(id+TASK_BOT_USE_SKILL) remove_task(id+TASK_REMOVE_STAT) } zp_colored_print(target, const message[], any:...) { static buffer[512], i, argscount argscount = numargs() if (!target) { static player for (player = 1; player <= g_maxplayers; player++) { if (!is_user_connected(player)) continue; static changed[5], changedcount changedcount = 0 for (i = 2; i < argscount; i++) { if (getarg(i) == LANG_PLAYER) { setarg(i, 0, player) changed[changedcount] = i changedcount++ } } vformat(buffer, charsmax(buffer), message, 3) message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player) write_byte(player) write_string(buffer) message_end() for (i = 0; i < changedcount; i++) setarg(changed[i], 0, LANG_PLAYER) } } else { vformat(buffer, charsmax(buffer), message, 3) message_begin(MSG_ONE, g_msgSayText, _, target) write_byte(target) write_string(buffer) message_end() } } public handle_gun(id) { new weap = get_user_weapon(id) if(weap == CSW_HEGRENADE && zp_get_user_zombie_class(id) == idclass_banchee && zp_get_user_zombie(id)) { entity_set_string(id, EV_SZ_viewmodel, g_vgrenade) } else if(weap == CSW_SMOKEGRENADE && zp_get_user_zombie_class(id) == idclass_banchee && zp_get_user_zombie(id)) { entity_set_string(id, EV_SZ_viewmodel, g_vgrenade) } return PLUGIN_HANDLED } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
В Zombie Plague 5.0 напрямую привязать Jump Grenade строго к классу зомби через стандартный конфиг нельзя — механика реализована иначе. Можно модифицировать исходники мода, чтобы при выборе класса игроку автоматически выдавалась нужная граната. Опишу свои действия.
Беру исходник плагина зомби класса, пусть будет Heavy (zp_class_heavy) Толстяк.
Добавляю в код такую строку:
В public plugin_init дописываю:
В public plugin_precache дописываю:
И последнее. Добавляю в конец кода:
Плагин компилируется и работает. Jump Grenade в руках у зомби класса присутствует.
Такую манипуляцию я проделал с двумя зомби классами и все работает. Дошла очередь до следующего класса, провел все те же самые работы, но плагин не компилируется. Зомби класс zp_class_banshee ( Ведьма с летучими мышами ).
Исходник, оригинал который был до добавления Джамп гранаты. Он компилируется без проблем:
Исходник в который добавил Джамп гранату:
Плагин не компилируется.
Подскажите в чем проблема.
Беру исходник плагина зомби класса, пусть будет Heavy (zp_class_heavy) Толстяк.
Добавляю в код такую строку:
C-подобный:
new const g_vgrenade[] = "models/v_zombibomb_class.mdl"
C-подобный:
register_event("CurWeapon","handle_gun","be","1=1")
C-подобный:
precache_model(g_vgrenade)
C-подобный:
public handle_gun(id)
{
new weap = get_user_weapon(id)
if(weap == CSW_HEGRENADE && zp_get_user_zombie_class(id) == g_zclass_heavy && zp_get_user_zombie(id))
{
entity_set_string(id, EV_SZ_viewmodel, g_vgrenade)
}
else if(weap == CSW_SMOKEGRENADE && zp_get_user_zombie_class(id) == g_zclass_heavy && zp_get_user_zombie(id))
{
entity_set_string(id, EV_SZ_viewmodel, g_vgrenade)
}
return PLUGIN_HANDLED
}
Такую манипуляцию я проделал с двумя зомби классами и все работает. Дошла очередь до следующего класса, провел все те же самые работы, но плагин не компилируется. Зомби класс zp_class_banshee ( Ведьма с летучими мышами ).
Исходник, оригинал который был до добавления Джамп гранаты. Он компилируется без проблем:
C-подобный:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <xs>
#define PLUGIN "DJB Zombie Class Banchee"
#define VERSION "1.0"
#define AUTHOR "Csoldjb"
new const zclass_name[] = "BedMa"
new const zclass_info[] = "\y[ MbIIIIu \y]"
new const zclass_model[] = "Banchee"
new const zclass_clawmodel[] = "v_hands_Banchee.mdl"
const zclass_health = 1800
const zclass_speed = 190
const Float:zclass_gravity = 1.0
const Float:zclass_knockback = 1.0
new const SOUND_FIRE[] = "zombie_plague/zombi_banshee_pulling_fire.wav"
new const SOUND_BAT_HIT[] = "zombie_plague/zombi_banshee_laugh.wav"
new const SOUND_BAT_MISS[] = "zombie_plague/zombi_banshee_pulling_fail.wav"
new const MODEL_BAT[] = "models/zombie_plague/bat_witch.mdl"
new const BAT_CLASSNAME[] = "banchee_bat"
new spr_skull
const Float:banchee_skull_bat_speed = 600.0
const Float:banchee_skull_bat_flytime = 3.0
const Float:banchee_skull_bat_catch_time = 3.0
const Float:banchee_skull_bat_catch_speed = 100.0
const Float:bat_timewait = 14.0
new g_stop[33]
new g_bat_time[33]
new g_bat_stat[33]
new g_bat_enemy[33]
new Float:g_temp_speed[33]
new idclass_banchee
new g_maxplayers
new g_roundend
new g_msgSayText
enum (+= 100)
{
TASK_BOT_USE_SKILL = 2367,
TASK_REMOVE_STAT
}
#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)
#define ID_TASK_REMOVE_STAT (taskid - TASK_REMOVE_STAT)
public plugin_precache()
{
precache_sound(SOUND_FIRE)
precache_sound(SOUND_BAT_HIT)
precache_sound(SOUND_BAT_MISS)
precache_model(MODEL_BAT)
spr_skull = precache_model("sprites/ef_bat.spr")
idclass_banchee = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "EventHLTV", "a", "1=0", "2=0")
register_event("DeathMsg", "EventDeath", "a")
register_logevent("logevent_round_end", 2, "1=Round_End")
register_clcmd("drop", "cmd_bat")
register_forward(FM_PlayerPreThink,"fw_PlayerPreThink")
RegisterHam(Ham_Touch,"info_target","EntityTouchPost",1)
RegisterHam(Ham_Think,"info_target","EntityThink")
g_maxplayers = get_maxplayers()
g_msgSayText = get_user_msgid("SayText")
}
public client_putinserver(id)
{
reset_value_player(id)
}
public client_disconnected(id)
{
reset_value_player(id)
}
public EventHLTV()
{
g_roundend = 0
for(new id = 1; id <= g_maxplayers; id++)
{
if (!is_user_connected(id)) continue;
reset_value_player(id)
}
}
public logevent_round_end()
{
g_roundend = 1
}
public EventDeath()
{
new id = read_data(2)
reset_value_player(id)
}
public zp_user_infected_post(id)
{
reset_value_player(id)
if(zp_get_user_nemesis(id)) return;
if(zp_get_user_zombie_class(id) == idclass_banchee)
{
if(is_user_bot(id))
{
set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
return
}
zp_colored_print(id, "^x04[ZP]^x01 Ваш навык^x04 Летучие Мыши^x01. Восстановление^x04 %.1f ^x01секунд.", bat_timewait)
}
}
public zp_user_humanized_post(id)
{
reset_value_player(id)
}
public cmd_bat(id)
{
if(g_roundend) return PLUGIN_CONTINUE
if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return PLUGIN_CONTINUE
if(zp_get_user_zombie_class(id) == idclass_banchee && !g_bat_time[id])
{
g_bat_time[id] = 1
set_task(bat_timewait,"clear_stat",id+TASK_REMOVE_STAT)
new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
if(!pev_valid(ent)) return PLUGIN_HANDLED
new Float:vecAngle[3],Float:vecOrigin[3],Float:vecVelocity[3],Float:vecForward[3]
fm_get_user_startpos(id,5.0,2.0,-1.0,vecOrigin)
pev(id,pev_angles,vecAngle)
engfunc(EngFunc_MakeVectors,vecAngle)
global_get(glb_v_forward,vecForward)
velocity_by_aim(id,floatround(banchee_skull_bat_speed),vecVelocity)
set_pev(ent,pev_origin,vecOrigin)
set_pev(ent,pev_angles,vecAngle)
set_pev(ent,pev_classname,BAT_CLASSNAME)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
set_pev(ent,pev_solid,SOLID_BBOX)
engfunc(EngFunc_SetSize,ent,{-20.0,-15.0,-8.0},{20.0,15.0,8.0})
engfunc(EngFunc_SetModel,ent,MODEL_BAT)
set_pev(ent,pev_animtime,get_gametime())
set_pev(ent,pev_framerate,1.0)
set_pev(ent,pev_owner,id)
set_pev(ent,pev_velocity,vecVelocity)
set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_flytime)
emit_sound(ent, CHAN_WEAPON, SOUND_FIRE, 1.0, ATTN_NORM, 0, PITCH_NORM)
g_stop[id] = ent
PlayWeaponAnimation(id, 2)
pev(id, pev_maxspeed, g_temp_speed[id])
set_pev(id,pev_maxspeed,0.1)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED
if(g_bat_stat[id])
{
new owner = g_bat_enemy[id], Float:ownerorigin[3]
pev(owner,pev_origin,ownerorigin)
static Float:vec[3]
aim_at_origin(id,ownerorigin,vec)
engfunc(EngFunc_MakeVectors, vec)
global_get(glb_v_forward, vec)
vec[0] *= banchee_skull_bat_catch_speed
vec[1] *= banchee_skull_bat_catch_speed
vec[2] = 0.0
set_pev(id,pev_velocity,vec)
}
return FMRES_IGNORED
}
public EntityThink(ent)
{
if(!pev_valid(ent)) return HAM_IGNORED
new classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,BAT_CLASSNAME))
{
static Float:origin[3];
pev(ent,pev_origin,origin);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end
emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)
new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])
engfunc(EngFunc_RemoveEntity,ent)
}
return HAM_IGNORED
}
public EntityTouchPost(ent,ptd)
{
if(!pev_valid(ent)) return HAM_IGNORED
new classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,BAT_CLASSNAME))
{
if(!pev_valid(ptd))
{
static Float:origin[3];
pev(ent,pev_origin,origin);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end
emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)
new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])
engfunc(EngFunc_RemoveEntity,ent)
return HAM_IGNORED
}
new owner = pev(ent,pev_owner)
if(0 < ptd && ptd <= g_maxplayers && is_user_alive(ptd) && ptd != owner)
{
g_bat_enemy[ptd] = owner
set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_catch_time)
set_task(banchee_skull_bat_catch_time,"clear_stat2",ptd+TASK_REMOVE_STAT)
set_pev(ent,pev_movetype,MOVETYPE_FOLLOW)
set_pev(ent,pev_aiment,ptd)
emit_sound(owner, CHAN_VOICE, SOUND_BAT_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM)
g_bat_stat[ptd] = 1
}
}
return HAM_IGNORED
}
public clear_stat(taskid)
{
new id = ID_TASK_REMOVE_STAT
g_bat_stat[id] = 0
g_bat_time[id] = 0
zp_colored_print(id, "^x04[ZP]^x01 Ваш навык^x04 Летучие Мыши^x01 восстановлен.")
}
public clear_stat2(idx)
{
new id = idx-TASK_REMOVE_STAT
g_bat_enemy[id] = 0
g_bat_stat[id] = 0
}
public bot_use_skill(taskid)
{
new id = ID_BOT_USE_SKILL
if (!is_user_alive(id)) return;
cmd_bat(id)
set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}
fm_get_user_startpos(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
pev(id, pev_origin, vOrigin)
pev(id, pev_v_angle, vAngle)
engfunc(EngFunc_MakeVectors, vAngle)
global_get(glb_v_forward, vForward)
global_get(glb_v_right, vRight)
global_get(glb_v_up, vUp)
vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}
aim_at_origin(id, Float:target[3], Float:angles[3])
{
static Float:vec[3]
pev(id,pev_origin,vec)
vec[0] = target[0] - vec[0]
vec[1] = target[1] - vec[1]
vec[2] = target[2] - vec[2]
engfunc(EngFunc_VecToAngles,vec,angles)
angles[0] *= -1.0
angles[2] = 0.0
}
PlayWeaponAnimation(id, animation)
{
set_pev(id, pev_weaponanim, animation)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(animation)
write_byte(pev(id, pev_body))
message_end()
}
reset_value_player(id)
{
g_stop[id] = 0
g_bat_time[id] = 0
g_bat_stat[id] = 0
g_bat_enemy[id] = 0
remove_task(id+TASK_BOT_USE_SKILL)
remove_task(id+TASK_REMOVE_STAT)
}
zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount
changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
C-подобный:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <xs>
#define PLUGIN "DJB Zombie Class Banchee"
#define VERSION "1.0"
#define AUTHOR "Csoldjb"
new const zclass_name[] = "BedMa"
new const zclass_info[] = "\y[ MbIIIIu \y]"
new const zclass_model[] = "Banchee"
new const zclass_clawmodel[] = "v_hands_Banchee.mdl"
new const g_vgrenade[] = "models/v_zombibomb_class.mdl"
const zclass_health = 1800
const zclass_speed = 190
const Float:zclass_gravity = 1.0
const Float:zclass_knockback = 1.0
new const SOUND_FIRE[] = "zombie_plague/zombi_banshee_pulling_fire.wav"
new const SOUND_BAT_HIT[] = "zombie_plague/zombi_banshee_laugh.wav"
new const SOUND_BAT_MISS[] = "zombie_plague/zombi_banshee_pulling_fail.wav"
new const MODEL_BAT[] = "models/zombie_plague/bat_witch.mdl"
new const BAT_CLASSNAME[] = "banchee_bat"
new spr_skull
const Float:banchee_skull_bat_speed = 600.0
const Float:banchee_skull_bat_flytime = 3.0
const Float:banchee_skull_bat_catch_time = 3.0
const Float:banchee_skull_bat_catch_speed = 100.0
const Float:bat_timewait = 14.0
new g_stop[33]
new g_bat_time[33]
new g_bat_stat[33]
new g_bat_enemy[33]
new Float:g_temp_speed[33]
new idclass_banchee
new g_maxplayers
new g_roundend
new g_msgSayText
enum (+= 100)
{
TASK_BOT_USE_SKILL = 2367,
TASK_REMOVE_STAT
}
#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)
#define ID_TASK_REMOVE_STAT (taskid - TASK_REMOVE_STAT)
public plugin_precache()
{
precache_sound(SOUND_FIRE)
precache_sound(SOUND_BAT_HIT)
precache_sound(SOUND_BAT_MISS)
precache_model(g_vgrenade)
precache_model(MODEL_BAT)
spr_skull = precache_model("sprites/ef_bat.spr")
idclass_banchee = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon","handle_gun","be","1=1")
register_event("HLTV", "EventHLTV", "a", "1=0", "2=0")
register_event("DeathMsg", "EventDeath", "a")
register_logevent("logevent_round_end", 2, "1=Round_End")
register_clcmd("drop", "cmd_bat")
register_forward(FM_PlayerPreThink,"fw_PlayerPreThink")
RegisterHam(Ham_Touch,"info_target","EntityTouchPost",1)
RegisterHam(Ham_Think,"info_target","EntityThink")
g_maxplayers = get_maxplayers()
g_msgSayText = get_user_msgid("SayText")
}
public client_putinserver(id)
{
reset_value_player(id)
}
public client_disconnected(id)
{
reset_value_player(id)
}
public EventHLTV()
{
g_roundend = 0
for(new id = 1; id <= g_maxplayers; id++)
{
if (!is_user_connected(id)) continue;
reset_value_player(id)
}
}
public logevent_round_end()
{
g_roundend = 1
}
public EventDeath()
{
new id = read_data(2)
reset_value_player(id)
}
public zp_user_infected_post(id)
{
reset_value_player(id)
if(zp_get_user_nemesis(id)) return;
if(zp_get_user_zombie_class(id) == idclass_banchee)
{
if(is_user_bot(id))
{
set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
return
}
zp_colored_print(id, "^x04[ZP]^x01 Ваш навык^x04 Летучие Мыши^x01. Восстановление^x04 %.1f ^x01секунд.", bat_timewait)
}
}
public zp_user_humanized_post(id)
{
reset_value_player(id)
}
public cmd_bat(id)
{
if(g_roundend) return PLUGIN_CONTINUE
if(!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return PLUGIN_CONTINUE
if(zp_get_user_zombie_class(id) == idclass_banchee && !g_bat_time[id])
{
g_bat_time[id] = 1
set_task(bat_timewait,"clear_stat",id+TASK_REMOVE_STAT)
new ent = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
if(!pev_valid(ent)) return PLUGIN_HANDLED
new Float:vecAngle[3],Float:vecOrigin[3],Float:vecVelocity[3],Float:vecForward[3]
fm_get_user_startpos(id,5.0,2.0,-1.0,vecOrigin)
pev(id,pev_angles,vecAngle)
engfunc(EngFunc_MakeVectors,vecAngle)
global_get(glb_v_forward,vecForward)
velocity_by_aim(id,floatround(banchee_skull_bat_speed),vecVelocity)
set_pev(ent,pev_origin,vecOrigin)
set_pev(ent,pev_angles,vecAngle)
set_pev(ent,pev_classname,BAT_CLASSNAME)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
set_pev(ent,pev_solid,SOLID_BBOX)
engfunc(EngFunc_SetSize,ent,{-20.0,-15.0,-8.0},{20.0,15.0,8.0})
engfunc(EngFunc_SetModel,ent,MODEL_BAT)
set_pev(ent,pev_animtime,get_gametime())
set_pev(ent,pev_framerate,1.0)
set_pev(ent,pev_owner,id)
set_pev(ent,pev_velocity,vecVelocity)
set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_flytime)
emit_sound(ent, CHAN_WEAPON, SOUND_FIRE, 1.0, ATTN_NORM, 0, PITCH_NORM)
g_stop[id] = ent
PlayWeaponAnimation(id, 2)
pev(id, pev_maxspeed, g_temp_speed[id])
set_pev(id,pev_maxspeed,0.1)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED
if(g_bat_stat[id])
{
new owner = g_bat_enemy[id], Float:ownerorigin[3]
pev(owner,pev_origin,ownerorigin)
static Float:vec[3]
aim_at_origin(id,ownerorigin,vec)
engfunc(EngFunc_MakeVectors, vec)
global_get(glb_v_forward, vec)
vec[0] *= banchee_skull_bat_catch_speed
vec[1] *= banchee_skull_bat_catch_speed
vec[2] = 0.0
set_pev(id,pev_velocity,vec)
}
return FMRES_IGNORED
}
public EntityThink(ent)
{
if(!pev_valid(ent)) return HAM_IGNORED
new classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,BAT_CLASSNAME))
{
static Float:origin[3];
pev(ent,pev_origin,origin);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end
emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)
new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])
engfunc(EngFunc_RemoveEntity,ent)
}
return HAM_IGNORED
}
public EntityTouchPost(ent,ptd)
{
if(!pev_valid(ent)) return HAM_IGNORED
new classname[32]
pev(ent,pev_classname,classname,31)
if(equal(classname,BAT_CLASSNAME))
{
if(!pev_valid(ptd))
{
static Float:origin[3];
pev(ent,pev_origin,origin);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION); // TE_EXPLOSION
write_coord(floatround(origin[0])); // origin x
write_coord(floatround(origin[1])); // origin y
write_coord(floatround(origin[2])); // origin z
write_short(spr_skull); // sprites
write_byte(40); // scale in 0.1's
write_byte(30); // framerate
write_byte(14); // flags
message_end(); // message end
emit_sound(ent, CHAN_WEAPON, SOUND_BAT_MISS, 1.0, ATTN_NORM, 0, PITCH_NORM)
new owner = pev(ent, pev_owner)
g_stop[owner] = 0
set_pev(owner,pev_maxspeed,g_temp_speed[owner])
engfunc(EngFunc_RemoveEntity,ent)
return HAM_IGNORED
}
new owner = pev(ent,pev_owner)
if(0 < ptd && ptd <= g_maxplayers && is_user_alive(ptd) && ptd != owner)
{
g_bat_enemy[ptd] = owner
set_pev(ent,pev_nextthink,get_gametime()+banchee_skull_bat_catch_time)
set_task(banchee_skull_bat_catch_time,"clear_stat2",ptd+TASK_REMOVE_STAT)
set_pev(ent,pev_movetype,MOVETYPE_FOLLOW)
set_pev(ent,pev_aiment,ptd)
emit_sound(owner, CHAN_VOICE, SOUND_BAT_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM)
g_bat_stat[ptd] = 1
}
}
return HAM_IGNORED
}
public clear_stat(taskid)
{
new id = ID_TASK_REMOVE_STAT
g_bat_stat[id] = 0
g_bat_time[id] = 0
zp_colored_print(id, "^x04[ZP]^x01 Ваш навык^x04 Летучие Мыши^x01 восстановлен.")
}
public clear_stat2(idx)
{
new id = idx-TASK_REMOVE_STAT
g_bat_enemy[id] = 0
g_bat_stat[id] = 0
}
public bot_use_skill(taskid)
{
new id = ID_BOT_USE_SKILL
if (!is_user_alive(id)) return;
cmd_bat(id)
set_task(random_float(5.0,15.0), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}
fm_get_user_startpos(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
pev(id, pev_origin, vOrigin)
pev(id, pev_v_angle, vAngle)
engfunc(EngFunc_MakeVectors, vAngle)
global_get(glb_v_forward, vForward)
global_get(glb_v_right, vRight)
global_get(glb_v_up, vUp)
vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}
aim_at_origin(id, Float:target[3], Float:angles[3])
{
static Float:vec[3]
pev(id,pev_origin,vec)
vec[0] = target[0] - vec[0]
vec[1] = target[1] - vec[1]
vec[2] = target[2] - vec[2]
engfunc(EngFunc_VecToAngles,vec,angles)
angles[0] *= -1.0
angles[2] = 0.0
}
PlayWeaponAnimation(id, animation)
{
set_pev(id, pev_weaponanim, animation)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(animation)
write_byte(pev(id, pev_body))
message_end()
}
reset_value_player(id)
{
g_stop[id] = 0
g_bat_time[id] = 0
g_bat_stat[id] = 0
g_bat_enemy[id] = 0
remove_task(id+TASK_BOT_USE_SKILL)
remove_task(id+TASK_REMOVE_STAT)
}
zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount
changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
public handle_gun(id)
{
new weap = get_user_weapon(id)
if(weap == CSW_HEGRENADE && zp_get_user_zombie_class(id) == idclass_banchee && zp_get_user_zombie(id))
{
entity_set_string(id, EV_SZ_viewmodel, g_vgrenade)
}
else if(weap == CSW_SMOKEGRENADE && zp_get_user_zombie_class(id) == idclass_banchee && zp_get_user_zombie(id))
{
entity_set_string(id, EV_SZ_viewmodel, g_vgrenade)
}
return PLUGIN_HANDLED
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
C-подобный:
//// zp_class_banchee.sma
//
// cstrike\addons\amxmodx\scripting\zp_class_banchee.sma(442) : error 017: undefined symbol "entity_set_string"
// // cstrike\addons\amxmodx\scripting\zp_class_banchee.sma(442) : warning 215: expression has no effect
// cstrike\addons\amxmodx\scripting\zp_class_banchee.sma(442) : error 001: expected token: ";", but found ")"
// cstrike\addons\amxmodx\scripting\zp_class_banchee.sma(442) : error 029: invalid expression, assumed zero
// cstrike\addons\amxmodx\scripting\zp_class_banchee.sma(442) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
Подскажите в чем проблема.