- #include <zombie_escape>
- #include <ze_zombie_class>
- native ze_is_user_nemesis(id)
- #define heal_sound "heal.wav"
- new const zclass_name[] = "| Shaman |"
- new const zclass_info[] = ">> Restore his health <<"
- new const zclass_model[] = "heal"
- new const zclass_clawmodel[] = "v_heal_knife.mdl"
- const zclass_health = 20000
- const zclass_speed = 300
- const Float:zclass_gravity = 860
- const Float:zclass_knockback = 0.0
- new g_zclass_heal;
- new Float:last_use[33];
- #define USE_SHAMAN_MODEL
- new const ZE_SETTING_FILE[] = "zombie_escape.ini"
- #if defined USE_SHAMAN_MODEL
- // Default models
- new const g_szModels_Shaman_Player[][] = { "zombie_shaman" }
- new const g_szModels_Shaman_Claws[][] = { "models/zombie_escape/v_knife_shaman.mdl" }
- new Array:g_aModels_Shaman_Player,
- Array:g_aModels_Shaman_Claws
- #endif
- public plugin_init()
- {
- register_plugin("[ZP] Zombie Class: Heal Zombie", "0.1", "WPMG Team")
- register_clcmd("drop", "use_skill")
- }
- public plugin_precache()
- {
- g_zclass_heal = ze_register_zombie_class(zclass_name, zclass_info, zclass_health, zclass_speed, zclass_gravity)
- precache_sound(heal_sound)
- new iIndex
- #if defined USE_SHAMAN_MODEL
- // Initialize arrays
- g_aModels_Shaman_Player = ArrayCreate(32, 1)
- g_aModels_Shaman_Claws = ArrayCreate(64, 1)
- // Load from external file
- amx_load_setting_string_arr(ZE_SETTING_FILE, "Player Models", "SHAMAN MODEL", g_aModels_Shaman_Player)
- amx_load_setting_string_arr(ZE_SETTING_FILE, "Weapon Models", "V_KNIFE SHAMAN", g_aModels_Shaman_Claws)
- // If we couldn't load from file, use and save default ones
- if (ArraySize(g_aModels_Shaman_Player) == 0)
- {
- for (iIndex = 0; iIndex < sizeof g_szModels_Shaman_Player; iIndex++)
- ArrayPushString(g_aModels_Shaman_Player, g_szModels_Shaman_Player[iIndex])
- // Save to external file
- amx_save_setting_string_arr(ZE_SETTING_FILE, "Player Models", "SHAMAN", g_aModels_Shaman_Player)
- }
- if (ArraySize(g_aModels_Shaman_Claws) == 0)
- {
- for (iIndex = 0; iIndex < sizeof g_szModels_Shaman_Claws; iIndex++)
- ArrayPushString(g_aModels_Shaman_Claws, g_szModels_Shaman_Claws[iIndex])
- // Save to external file
- amx_save_setting_string_arr(ZE_SETTING_FILE, "Weapon Models", "V_KNIFE SHAMAN", g_aModels_Shaman_Claws)
- }
- // Precache models
- new player_model[32], model[64], model_path[128]
- for (iIndex = 0; iIndex < ArraySize(g_aModels_Shaman_Player); iIndex++)
- {
- ArrayGetString(g_aModels_Shaman_Player, iIndex, player_model, charsmax(player_model))
- formatex(model_path, charsmax(model_path), "models/player/%s/%s.mdl", player_model, player_model)
- precache_model(model_path)
- // Support modelT.mdl files
- formatex(model_path, charsmax(model_path), "models/player/%s/%sT.mdl", player_model, player_model)
- if (file_exists(model_path)) precache_model(model_path)
- }
- for (iIndex = 0; iIndex < ArraySize(g_aModels_Shaman_Claws); iIndex++)
- {
- ArrayGetString(g_aModels_Shaman_Claws, iIndex, model, charsmax(model))
- precache_model(model)
- }
- #endif
- }
- public ze_user_infected(id, infector)
- {
- if(ze_get_current_zombie_class(id) == g_zclass_heal)
- {
- last_use[id] = 0.0
- }
- #if defined USE_SHAMAN_MODEL
- new szPlayerModel[32], szModel[64]
- ArrayGetString(g_aModels_Shaman_Player, random_num(0, ArraySize(g_aModels_Shaman_Player) - 1), szPlayerModel, charsmax(szPlayerModel))
- rg_set_user_model(id, szPlayerModel)
- ArrayGetString(g_aModels_Shaman_Claws, random_num(0, ArraySize(g_aModels_Shaman_Claws) - 1), szModel, charsmax(szModel))
- cs_set_player_view_model(id, CSW_KNIFE, szModel)
- #endif
- }
- public use_skill(id)
- {
- if(is_user_alive(id) && !ze_is_user_nemesis(id) && ze_is_user_zombie(id) && (ze_get_current_zombie_class(id) == g_zclass_heal))
- {
- if((pev(id, pev_health) < float(ze_get_zombie_class_health(id)) && (last_use[id] + 20.0 <= get_gametime()))
- {
- last_use[id] = get_gametime();
- set_pev(id, pev_health, float(ze_get_zombie_class_health(id)))
- emit_sound(id, CHAN_ITEM, heal_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, id)
- write_short(1<<10)
- write_short(1<<12)
- write_short(0x0000)
- write_byte(50)
- write_byte(150)
- write_byte(50)
- write_byte(200)
- message_end()
- return PLUGIN_HANDLED;
- }
- }
- return PLUGIN_CONTINUE;
- }
- stock client_printcolor(const id, const input[], any:...)
- {
- new iCount = 1, iPlayers[32]
- static szMsg[191]
- vformat(szMsg, charsmax(szMsg), input, 3)
- replace_all(szMsg, 190, "/g", "^4")
- replace_all(szMsg, 190, "/y", "^1")
- replace_all(szMsg, 190, "/t", "^3")
- replace_all(szMsg, 190, "/w", "^0")
- if(id) iPlayers[0] = id
- else get_players(iPlayers, iCount, "ch")
- for(new i = 0; i < iCount; i++)
- {
- if(is_user_connected(iPlayers[i]))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
- write_byte(iPlayers[i])
- write_string(szMsg)
- message_end()
- }
- }
- }
ze_heal_zombie.sma(116) : error 088: number of arguments does not match definition
ze_heal_zombie.sma(120) : error 088: number of arguments does not match definition